只是想知道完全不稳定的关键字如何在内部运作。
尝试使用GCC和Turbo C(基于DOS)这两种情况都表现得不同。
volatile int iData;
iData = 5;
printf("%d %d %d %d %d %d\n", ++iData, iData++, iData++, ++iData, iData, iData++);
输出是否依赖于printf函数数据传递或基于编译器?
谢谢 干杯!!
答案 0 :(得分:2)
您通过在同一语句中多次修改iData
来调用未定义的行为。由于行为未定义,不同的编译器可以为它做不同的事情,它们都不是错误的。所以你真的不希望代码中存在未定义的行为。
有关详细信息,请参阅Why are these constructs (using ++) undefined behavior?。
注意:代码中的奇怪行为与volatile
关键字无关。有关volatile
的更多信息,请参阅Why is volatile needed in C?