gpt4 book ai didi

c - 循环内的宏和函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:17 25 4
gpt4 key购买 nike

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

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

最佳答案

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

但是,您需要仔细定义函数替换宏,使其参数只计算一次。例如,如果您有这样的宏

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

如果你这样调用它DOUBLE(i++),它会被扩展为(i++)+(i++),这会导致C中的未定义行为。这就是为什么仅对其参数求值一次的内联函数比宏更可取。

关于c - 循环内的宏和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com