来自Programming in C (3rd edition),第309页:
因为宏直接用程序代替到程序中 预处理器,它们不可避免地会占用更多的内存空间 等价定义的函数。
在哪种意义上,宏比等效定义的函数占用更多空间?
答案 0 :(得分:2)
正如你的引言所说,宏的文本被预处理器直接替换为代码。 e.g。
#define ABSOLUTE_VALUE( x ) ( ((x) < 0) ? -(x) : (x) )
int absoluteSum(int a, int b) {
return ABSOLUTE_VALUE(a) + ABSOLUTE_VALUE(b);
}
变为:
int absoluteSum(int a, int b) {
return ( ((a) < 0) ? -(a) : (a) ) + ( ((b) < 0) ? -(b) : (b) );
}
预处理后。传统的函数调用不会这样做。如果在代码中使用宏两次,宏代码将被替换两次,从而增加了内存占用量。使用传统函数,宏的代码只能找到并编译一次,如下所示。
int abs(int value) {
return ( ((value) < 0) ? -(value) : (value) );
}
int absoluteSum(int a, int b) {
return abs(a) + abs(b);
}