【发布时间】:2011-08-31 17:47:32
【问题描述】:
我有如下打印语句...
int i=0;
printf("%d,%d,%d,%d,%d,%d",i++,i,++i,i--,++i,i);
根据优先级i++,i,++i,i--,++i,i 应该像下面那样逐步评估...
0,i,++i,i--,++i,i // after this i=1;
0,i,++i,1,++i,i // after this i=0;
0,i,++i,1,1,i // after this i=1;
0,i,2,1,1,i // after this i=2;
0,2,2,1,1,2 // after this i=2;
我认为这个逻辑的最终结果应该是......
0,2,2,1,1,2
但我收到2,2,2,1,2,2 这背后的原因是什么?
顺便说一句,我正在使用 Visual c++ 2010...
【问题讨论】:
-
您观察到的行为与运算符优先级绝对无关。此外,运算符优先级并不决定“逐步”的评估顺序。你从哪里得到这个奇怪的想法?
-
我的 turbo c 编译器得到了 1,1,1,1,1,0主要在编译器上1
-
@AndreyT 如果它不是编译器执行它的步骤过程
-
@niko 我知道它在 turbo c 评估中是如何工作的,一次从右到左一个变量;但在 vs2010 上,这不是理性的答案,因为我没有看到任何逻辑!
-
@teacher:没有人知道它是如何执行的。在 C/C++ 语言中,“步骤”的概念由所谓的 序列点 定义。序列点之间发生的一切都是一个不可分割的步骤。它无法分解为更小的步骤,因此无法进行有意义的进一步分析。
标签: c visual-c++