无限循环条件变量是否应始终声明为volatile?

考虑一下这种类型的代码,

while( !cond ) ; 

如果cond未声明为volatile,则编译器可以通过将其缓存在寄存器中来优化它。 在这种情况下,即使在设置cond后,while循环也将继续。

现在这是否意味着任何此类变量应始终声明为volatile ? 为什么编译器不够聪明才能意识到它不应该缓存这些变量?

为什么不缓存变量? 你不要在循环中改变它,所以它在C的思想中等同于while (true);

也就是说,除非你的程序是multithreading的,在这种情况下,变量可以在循环运行时改变,什么都不做。 但是,C语言对线程一无所知(更常见的是,正如Lundin所说,关于任何未从main调用的函数或从main调用的函数等),所以你必须自己使用volatile让C知道它不知道的事情正在发生。