#define SUM(x,y) ((x)+(y))
void print(){
for(int i=0;i<10;i++)
printf("sum=%d\n", SUM(i,i+1));
}
使用上面的宏SUM有什么好处吗?我读到当有一个带有函数调用的循环时,宏很有用。
答案 0 :(得分:1)
对于非常简单的计算,调用函数可能比实际计算本身具有更多的开销;在一个循环中,情况更糟。
但是,您需要仔细定义函数替换宏以仅评估其参数一次。例如,如果您有像这样的宏
#define DOUBLE(i) ((i) + (i))
并且你将其称为DOUBLE(i++)
,它将扩展为(i++)+(i++)
,这将导致C中的未定义行为。这就是为什么内联函数,它只会评估其参数一次,是比宏观更好。