在C中,如何将结构的成员声明为volatile?

bla*_*k3r 21 c struct volatile

如何将结构的特定成员声明为volatile?

pax*_*blo 33

与非struct字段完全相同:

#include <stdio.h>
int main (int c, char *v[]) {
    struct _a {
        int a1;
        volatile int a2;
        int a3;
    } a;
    a.a1 = 1;
    a.a2 = 2;
    a.a3 = 3;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以struct使用"volatile struct _a {...}"上面的方法将整个标记为易失性.


Oll*_*lli 11

根据这篇文章应该很直接:

最后,如果将volatile应用于struct或union,则struct/union的整个内容都是volatile.如果您不想要此行为,可以将volatile限定符应用于struct/union的各个成员.


小智 7

我需要澄清 C/C++ 的 volatile 因为这里有一个错误的答案。自 1994 年以来,我一直在为微控制器编程,这个关键字非常有用并且经常需要。

volatile 永远不会破坏你的代码,使用它永远不会有风险。该关键字将基本上确保该变量未被编译器优化。如果你过度使用这个关键字,最糟糕的情况是你的程序会变得更大更慢。

这是当您需要为变量使用此关键字时: - 您有一个写入中断函数内部的变量。AND - 这个相同的变量被读取或写入外部中断函数。或 如果您有 2 个使用变量的不同优先级的中断函数,那么您也应该使用 'volatile'。

否则,不需要关键字。

至于硬件寄存器,如果您不在程序中做奇怪的事情,即使没有关键字,它们也应该被视为易失性。