今天翻书在学习基本c++语法的时候看到了一个很经典的宏定义下的错误,即#define square(x) (x)*(x),但将x赋值为a++以后输出咱就看不懂了,虚心求解答。
编译器:vs2022
c++语言
下面是三个有疑惑的例子:
宏定义只是进行了一次替换相当于cout<<(a++)(a++)<<" "<<(++a)(++a)<<a
你对比运算顺序可以看出来 ++运算在*运算和输出运算前.
和编译器也有原因你用gcc编译结果也不一样
这没啥纠结的必要吧
你可以理解为a++和++a的区别。
就是a++是先赋值,再加;++a是先+再赋值(应该是这样,要是错了赶紧提醒我)
所以a++的时候,a会变成5,但是这个5不是赋给a的最终值,下一个a++的时候,先赋给a 一个3的值,a++之后就是5了。
但是a++之后,++a就会接着这个5,先+再赋值,就导致a变成7了。
差不多就是这个意思,我解释的也很混乱