为什么宏比等价定义的函数占用更多空间?

时间:2014-09-28 11:22:30

标签: function memory macros c-preprocessor

来自Programming in C (3rd edition),第309页:

  

因为宏直接用程序代替到程序中   预处理器,它们不可避免地会占用更多的内存空间   等价定义的函数。

在哪种意义上,宏比等效定义的函数占用更多空间?

1 个答案:

答案 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);
}