宏和函数有什么区别?

define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏。
宏分为普通宏定义和函数宏定义:
普通宏定义:#define MAX 1024
函数宏定义:#define MIN(a, b) ((a) < (b) ? (a) : (b))

宏函数可以完成一些简单的运算,那么宏为什么不能取代函数呢?它们有什么区别?

从代码长度来看:
宏每次使用都插入到程序中对应的位置。除了非常小的宏之外,程序的长度将大幅度增长。
而函数代码只出现在一个地方,每次使用这个函数时,都调用那个地方的同一份代码。

从执行速度看:
宏执行速度快,在预处理阶段直接替换;
调用函数涉及到栈帧开销,相对比宏慢。

从优先级角度来看:
宏直接进行替换,对于参数,除非它们加上括号,否则邻近操作符的优先级可能出错;
而函数参数只在函数调用时求值一次,表达式的求值结果更容易预测。

从调试看
宏是不能调试的;而函数可以调试。

从参数类型来看
宏与类型无关;而函数一定是与类型紧密相关的。

猜你喜欢

转载自blog.csdn.net/han8040laixin/article/details/81560348