编译器问题或c代码块中的一些错误

时间:2013-06-01 18:37:05

标签: c++ compiler-construction

c ++ 中进行简单编码时出现了非常惊人且令人震惊的逻辑问题。

  

请参阅以下两个代码块。

代码1

int m = 5, n = 0;
n = m++ * ++m;
//This print m = 7 and n = 36
//Which is logically wrong

代码2

int m = 5;
int n = m++ * ++m;
//This print m = 7 and n = 35
//Which is logically right

正如我们逻辑思考的那样,代码块2给出了正确的答案,但是奇怪或神奇的是代码块1出了什么问题?

作为部分代码,我们之前只是声明了int n

可能有些编译!!!!!!

2 个答案:

答案 0 :(得分:3)

检查http://en.cppreference.com/w/cpp/language/eval_order,尤其是讨论“未定义行为”的部分。基本上它不是编译器中的错误。语言说你正在做的事情是未定义的。

答案 1 :(得分:0)

除了“未定义的行为”部分,这很重要,这里没有什么不合逻辑的。假设评估是从右到左:

++m -> value is 6, m is 6
m++ -> value is 6, m is 7
6*6 = 36