急(C语言)比较带参的宏与带参的函数之间的区别

C语言简答题:比较带参的宏与带参的函数之间的区别
请各位回答的详细点,谢谢~

区别:
1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2、宏进行定义时不会考虑参数的类型。
3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5、参数宏在定义时要多加小心,多加括号。
6、函数只在目标文件中存在一处,比较节省程序空间。
7、函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8、函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-04
宏是在编译器在对源代码进行编译的时候进行宏替换,即把带参数的调用的那段代码替换成宏定义的那段代码,实质代码替换,因此带参的宏不能进行递归定义。而带参的函数则会编译到可执行文件中,是一种执行的逻辑,可以递归定义,即可以写递归函数。
所以本质区别就是:
1,一个是代码替换,一个是生成了运行的逻辑。
2,宏定义的不能递归定义,即不可以用宏定义一个递归函数。
第2个回答  2009-01-05
宏:代码替换,不检查数据类型,实质上由编译器展开,变量作用域在主程序,

函数:子程序,数据类型,编译成子程序,局部变量,(调用时局部变量入栈故可以递归)
第3个回答  推荐于2018-03-13
1.宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2.宏进行定义时不会考虑参数的类型。
3.参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4.参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5.参数宏在定义时要多加小心,多加括号。
6.函数只在目标文件中存在一处,比较节省程序空间。
7.函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8.函数的参数存在传值和传地址(指针)的问题,参数宏不存在。本回答被提问者和网友采纳

急(C语言)比较带参的宏与带参的函数之间的区别
8、函数的参数存在传值和传地址(指针)的问题,参数宏不存在。

谁知道带参数的宏和带参数的函数的区别和联系?
这个在正常用的时候看不出来,在编译的时候可以看出来,用宏时代码产生很多,可以说叫”迟后连编”,用函数时与正常的代码一样.但是相对于函数来说宏的运行速度快.

我想知道c语言里面怎么区分函数与宏
(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。如果MAX是个普通函数,那么它的函数体return a > b ? a : b; 要编译生成指令,代码中出现的每次调用也要编译生成传参指令和call指令。而如果MAX是个函数式宏定义,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编...

C语言函数问题。带参数的宏ab这里是实参,下面mn也是实参,所以这里是下 ...
普通函数的声明,定义里用的叫形参,普通函数调用时,调用语句里的参数叫实参。宏与它们不一样,宏在预编译期间,做的工作 是 替代 (字符替代,名字替代)。defind area(a,b) (PI * a * b) 里面的 PI 要被 前面PI 的 宏定义 替代成:defind area(a,b) ((asin(1) * 2) * a * b)...

C语言里面,什么是有参函数,什么是无参函数
无参函数,是指在主调函数调用被调函数时,主调函数不向被调函数传递数据。无参函数一般用来执行特定的功能,可以有返回值,也可以没有返回值,但一般以没有返回值居多。有参函数,是指在主调函数调用被调函数时,主调函数通过参数向被调函数传递数据。在一般情况下,有参函数在执行被调函数时会得到...

小弟请教 C语言函数不带参数的问题
带参数是因为能传递参数(传入、传出),即便返回一个状态也是好的,不带参数的话只完成了一些全局变量的修改,运行结果无法监控。所以最好还是传递参数,如果没有必要传入,那么返回个退出状态就可以了。

带参宏定义与函数的问题
而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。3. 在宏定义中的形参是标识符,而宏调用...

c语言中的“宏”是指什么?
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。1. 不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。格式: #define 标识符 字符串其中的标识符就是所谓的符号常量,...

C语言中,宏名有类型吗?
C语言中,宏名没有类型,其参数也没有类型。宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任意类型的数据。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换。

请问c语言中的有参和无参函数具体有什么区别呢?最好举例一下哦,谢谢啦...
void A(int a);void A(int a, int b);这些是有参函数,也就是传入参数,你可以在函数体内操作,对应地在主函数调用函数时会传入实参,如:A(a)。viod A();这是无参函数,对应在主函数调用函数时不会传入参数,如A()。

相似回答