这是一个丑陋的代码,仅用于在采访中恐吓求职者...... 但我无法理解它背后的逻辑。 有人可以解释为什么用" b"不等于" a"?
#include <stdio.h>
void main(){
int a = 1, b = 1, c = 1;
printf("%d %d %d", ++a + a++ + 1, 1 + ++b + b++, ++c + c++); // displays 6 5 5
}
非常感谢。
答案 0 :(得分:1)
逻辑很简单:
创建未定义的行为,让鼻子恶魔恐吓求职者。这就是所谓的工作保障。
如果写入变量,除了计算应写入的值外,不得在没有插入序列点的情况下再次访问变量。
第二个UB案例或至少实施定义行为:
void main()
应该是
之一int main(void)
int main(int argc, char* argv[])
答案 1 :(得分:0)
只是为了证明这是一个糟糕的想法,这是VS2012中的输出(我认为是技术上的C ++编译器):
5 5 4
GCC&amp; G ++:
6 5 5
显然,你的采访者在海湾合作委员会中试过了。
答案 2 :(得分:0)
阅读Undefined behavior and sequence points。
这是一个略有不同但又相似的例子(感谢Zan):
2)此外,只能访问先前值以确定要存储的值。
C ++示例:
std::printf("%d %d", i,++i); // invokes Undefined Behaviour because of Rule no 2