我试图找出以下代码的问题。基于各种互联网搜索,我有这个想法,它会导致不确定的行为,但我希望能有更好的理解。
#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)。
问题:这种行为是一致的还是依赖于特定的编译器?
感谢大家提前