gpt4 book ai didi

c - 为什么全局变量会翻倍两次?

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

#include <stdio.h>
#define abs(x) (x < 0 ? -x : x)
int x;
int doubleGlobalX()
{
x*=2;
return x;
}

int main()
{
scanf("%d",&x);//5
printf("%d\n",abs(doubleGlobalX()));//20
return 0;
}

当输入为 5 时,此代码的输出为 20。当输入为 15 时,输出为 60。不知道为什么它会将全局翻倍。

最佳答案

#define abs(x) (x < 0 ? -x : x)

宏执行文本替换。像这样定义 abs() 宏是一个众所周知的陷阱,因为它最终会计算 x 两次。如果它是一个函数就好了,但是作为一个宏它就是一个问题。 abs(doubleGlobalX()) 扩展为:

doubleGlobalX() < 0 ? -doubleGlobalX() : doubleGlobalX()

它最终调用了 doubleGlobalX() 两次,这导致 x 被加倍了两次。

关于c - 为什么全局变量会翻倍两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58463510/

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