C中的易失性,它如何在内部工作

时间:2013-04-10 05:08:28

标签: c linux-kernel x86 linux-device-driver cpu-registers

只是想知道完全不稳定的关键字如何在内部运作。

尝试使用GCC和Turbo C(基于DOS)这两种情况都表现得不同。

volatile int iData;
iData = 5;
printf("%d %d %d %d %d %d\n", ++iData, iData++, iData++, ++iData, iData, iData++);

输出是否依赖于printf函数数据传递或基于编译器?

谢谢 干杯!!

1 个答案:

答案 0 :(得分:2)

您通过在同一语句中多次修改iData来调用未定义的行为。由于行为未定义,不同的编译器可以为它做不同的事情,它们都不是错误的。所以你真的不希望代码中存在未定义的行为。

有关详细信息,请参阅Why are these constructs (using ++) undefined behavior?

注意:代码中的奇怪行为与volatile关键字无关。有关volatile的更多信息,请参阅Why is volatile needed in C?