【发布时间】:2014-09-28 11:22:30
【问题描述】:
来自Programming in C (3rd edition),第 309 页:
因为宏被直接代入程序 预处理器,它们不可避免地使用比预处理器更多的内存空间 等价定义的函数。
在什么意义上,宏比等效定义的函数占用更多空间?
【问题讨论】:
标签: function memory macros c-preprocessor
来自Programming in C (3rd edition),第 309 页:
因为宏被直接代入程序 预处理器,它们不可避免地使用比预处理器更多的内存空间 等价定义的函数。
在什么意义上,宏比等效定义的函数占用更多空间?
【问题讨论】:
标签: function memory macros c-preprocessor
正如您的报价所说,宏的文本由预处理器直接替换到代码中。例如
#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);
}
【讨论】: