【问题标题】:Why do macros take more space than an equivalently defined function?为什么宏比等效定义的函数占用更多空间?
【发布时间】:2014-09-28 11:22:30
【问题描述】:

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

因为宏被直接代入程序 预处理器,它们不可避免地使用比预处理器更多的内存空间 等价定义的函数。

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

【问题讨论】:

    标签: function memory macros c-preprocessor


    【解决方案1】:

    正如您的报价所说,宏的文本由预处理器直接替换到代码中。例如

    #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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2013-05-14
      • 2011-09-07
      相关资源
      最近更新 更多