C程序中preincrement运算符的行为

C程序中preincrement运算符的行为,第1张

概述我正在运行以下C代码: #define cube(x) (x*x*x)void main(){ int x=2,y; y=cube(++x); printf("%d %d",++x,y); } 我期待结果为 6,60 但它给出了不同的结果.我想我对预处理器有误解.我认为代码将类似于 void main(){ i 我正在运行以下C代码:

#define cube(x) (x*x*x)voID main(){       int x=2,y;       y=cube(++x);                printf("%d %d",++x,y);    }

我期待结果为

6,60

但它给出了不同的结果.我想我对预处理器有误解.我认为代码将类似于

voID main(){       int x=2,y;       y=++x*++x*++x;                printf("%d %d",y);    }

如果我错了,请纠正我.

我正在解释结果
3 * 4 * 5 = 60
但它来了125

解决方法 您定义了一个宏,它作为一个简单的字符串替换,因此所呈现的转换是正确的.

但是,子表达式的执行顺序是未定义的,例如,它们可以是交错的,这会产生未定义的行为.

总结

以上是内存溢出为你收集整理的C程序中preincrement运算符的行为全部内容,希望文章能够帮你解决C程序中preincrement运算符的行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存