gpt4 book ai didi

c++ - 如果在 SQUARE 宏中传递前缀变量,为什么结果不同?

转载 作者:行者123 更新时间:2023-11-30 01:11:50 25 4
gpt4 key购买 nike

您能解释一下为什么下面程序的结果不同吗?

程序:

#define MUL(X) X*X
int main()
{
int i=3;
cout<<MUL(++i)<<"\n";
return 0;
}

输出:

25

最佳答案

为了分析这个,我们把宏展开,变成++i *++i

形式上,++i *++i 的行为是未定义,因为* 不是一个排序点,并且++ 改变 i。所以编译器可以做任何事情,不需要进一步解释。

如果您的编译器支持typeof(它是编译时可计算的,因此不会进行任何递增)和表达式语句,那么您的宏的安全版本是

#define MUL(i) ({    \
typeof(i) j = (i); \
j*j; \
})

尽管完全避免使用宏并使用函数是明智的。

关于c++ - 如果在 SQUARE 宏中传递前缀变量,为什么结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224074/

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