急(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.函数的参数存在传值和传地址(指针)的问题,参数宏不存在。本回答被提问者和网友采纳