循环中的宏和函数

时间:2014-04-24 14:01:40

标签: c macros

#define SUM(x,y) ((x)+(y))
void print(){
  for(int i=0;i<10;i++)
    printf("sum=%d\n", SUM(i,i+1));
}

使用上面的宏SUM有什么好处吗?我读到当有一个带有函数调用的循环时,宏很有用。

1 个答案:

答案 0 :(得分:1)

对于非常简单的计算,调用函数可能比实际计算本身具有更多的开销;在一个循环中,情况更糟。

但是,您需要仔细定义函数替换宏以仅评估其参数一次。例如,如果您有像这样的宏

#define DOUBLE(i) ((i) + (i))

并且你将其称为DOUBLE(i++),它将扩展为(i++)+(i++),这将导致C中的未定义行为。这就是为什么内联函数,它只会评估其参数一次,是比宏观更好。