【发布时间】:2013-04-10 05:08:27
【问题描述】:
只是想知道 volatile 关键字在内部是如何工作的。
在 GCC 和 Turbo C(基于 DOS)这两种情况下都进行了尝试,它的行为方式不同。
volatile int iData;
iData = 5;
printf("%d %d %d %d %d %d\n", ++iData, iData++, iData++, ++iData, iData, iData++);
输出依赖于 printf 函数数据传递还是基于编译器?
谢谢 干杯!!
【问题讨论】:
-
输出可以取决于你想要的任何东西,因为你的程序调用了未定义的行为。无论
iData是否为volatile,它都会这样做。这是一个重复的问题。 -
查找
ISO/IEC TR3标准草案部分6.7.3.6。 [链接](www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf).该部分不难理解 -
不要尝试使用 Turbo C,它不遵循任何版本的 C 标准。此外,您的示例是无稽之谈,并且依赖于未定义和未指定的行为。
标签: c linux-kernel x86 linux-device-driver cpu-registers