c语言中,宏和函数的区别

一、代码长度:宏是完全替换,插入到程序里使得代码变长;

函数代码是只出现在一个地方,使用时则去那里调用。

二、执行速度:宏更快一些,因为在预编译阶段都已完成;

函数则慢一点,因为需要调用以及返回(压栈/出栈)额外时间。

三、操作符优先级:宏有时要少加括号而导致计算逻辑出错;

函数最后只将值返回来,结果容易预测。

四、参数求值:宏每次都要计算;

函数只需要计算一次,之后多次调用并不会导致多次求值而出错。

五、参数类型:宏不关心类型,只要参数操作合法就可以;

函数类型要一致,不同类型则需要不同函数。

时间: 2024-08-24 19:53:31

c语言中,宏和函数的区别的相关文章

C语言中的system函数参数详解

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的,所以只要在运行窗口中可以使用的命令都可以用SYSTEM()

C语言中的system函数參数具体解释

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,能够直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数运行命令和在DOS窗体中运行命令的效果是一样的,所以仅仅要在运行窗体中能够使用的命令都能够用SYSTEM(

R语言中 fitted()和predict()的区别

fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何.fit<-lm(weight~height,data=women)fitted(fit) predict(fit,newdata=data.frame(height=90))##将90代入看结果如何这是R in action中的例子 R语言中 fitted()和predict()的区别,布布扣,bubuko.com R语言中 fi

宏和函数的区别

先说宏和函数的区别: 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传

c语言中的rewind函数,Win CE 不支持,可用fseek函数替换

FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell(read); // c语言中的rewind函数就是把文件指针从你现在读取的位置,重新指向文件开头 // Win CE 不支持该函数,可用fseek函数替换 // rewind(read); fseek(read,0L,SEEK_SET); …… …… }

Java语言中extend和implement的区别

Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口. extends继承的父类:不能声明为final或者定义为abstract: implements实现接口interface,用逗号分开就好: 如:class A extends B implements C, D, E interface的引入是为了部分地提供多继承的功能. 在interface中只需声明方法头,而将方法体留给实现的class来做. 这些实现的class的实例完全可以当作inte

C语言中sizeof与strlen 的区别

sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾.总的来说sizeof把'\0'也给数上了,而strlen遇到'\0'就停止计数了.区别如下:(1) sizeof是一个C语言中的一个单目运算符,而strlen是一个函数,用来计算字符串的长度.(2)sizeof求的是数据类型所占空间的大小,而strlen是求字符串的长度实例1:printf("char=%d/n",sizeof(char)); //1pr

c语言中的malloc函数

少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小. 函数:void *malloc(int size); malloc 向系统申请分配指定size个字节的

c语言中%s和%d的区别

1 /************************************************************************* 2 > File Name: ptr_both.c 3 > Author: Mr.Yang 4 > Purpose:思考指针指向字符串和指向整型的区别 5 > Created Time: 2017年06月03日 星期六 17时37分17秒 6 ********************************************