急(C语言)比较带参的宏与带参的函数之间的区别
展开全部
区别:
1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2、宏进行定义时不会考虑参数的类型。
3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5、参数宏在定义时要多加小心,多加括号。
6、函数只在目标文件中存在一处,比较节省程序空间。
7、函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8、函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2、宏进行定义时不会考虑参数的类型。
3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5、参数宏在定义时要多加小心,多加括号。
6、函数只在目标文件中存在一处,比较节省程序空间。
7、函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8、函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
展开全部
宏是在编译器在对源代码进行编译的时候进行宏替换,即把带参数的调用的那段代码替换成宏定义的那段代码,实质代码替换,因此带参的宏不能进行递归定义。而带参的函数则会编译到可执行文件中,是一种执行的逻辑,可以递归定义,即可以写递归函数。
所以本质区别就是:
1,一个是代码替换,一个是生成了运行的逻辑。
2,宏定义的不能递归定义,即不可以用宏定义一个递归函数。
所以本质区别就是:
1,一个是代码替换,一个是生成了运行的逻辑。
2,宏定义的不能递归定义,即不可以用宏定义一个递归函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏:代码替换,不检查数据类型,实质上由编译器展开,变量作用域在主程序,
函数:子程序,数据类型,编译成子程序,局部变量,(调用时局部变量入栈故可以递归)
函数:子程序,数据类型,编译成子程序,局部变量,(调用时局部变量入栈故可以递归)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
2.宏进行定义时不会考虑参数的类型。
3.参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4.参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5.参数宏在定义时要多加小心,多加括号。
6.函数只在目标文件中存在一处,比较节省程序空间。
7.函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8.函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
2.宏进行定义时不会考虑参数的类型。
3.参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4.参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5.参数宏在定义时要多加小心,多加括号。
6.函数只在目标文件中存在一处,比较节省程序空间。
7.函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8.函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询