#define和incremet / decrement运算符之间的交互

时间:2017-04-11 14:16:42

标签: c++ macros undefined-behavior post-increment pre-increment

我试图找出以下代码的问题。基于各种互联网搜索,我有这个想法,它会导致不确定的行为,但我希望能有更好的理解。

#include <iostream>
#define SQUARE (x) x*x

int main()
{
int l=5;
std::cout<<"test"<<SQUARE(l++)<<std::endl;
std::cout<<l<<endl; //check
std::cout<<"test1"<<SQUARE(++l)<<std::endl;
}

我已经使用Dev X ++ 5.11(所以cpp)编译并运行程序,我已经获得了以下输出:

测试30

7

test1 81

因此我理解在测试中编译器开始执行乘法(l = 5)然后加1(l = 6)然后识别乘法的第二个元素(l = 6 - >结果30)并得出结论加1(l = 7,如支票所示)。 就test1而言,编译器在乘法的第一个元素(l = 8)中加1,然后再加1(l = 9),最后它乘以(9 * 9 = 81)。

问题:这种行为是一致的还是依赖于特定的编译器?

感谢大家提前

0 个答案:

没有答案
相关问题