代码之家  ›  专栏  ›  技术社区  ›  blak3r

在C语言中,如何声明结构的成员是易失性的?

  •  18
  • blak3r  · 技术社区  · 16 年前

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

    3 回复  |  直到 7 年前
        1
  •  28
  •   paxdiablo    16 年前

    与非完全相同- 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;
    }
    

    你可以标记整个 结构 使用时易挥发 "volatile struct _a {...}" 但上述方法适用于各个领域。

        2
  •  9
  •   Olli    16 年前

    应该是相当直接的根据 this 文章:

    最后,如果将volatile应用于 结构或联合,整个内容 结构/联合的不稳定。如果 你不想要这种行为,你可以 将volatile限定符应用于 个人成员 结构/结合。

        3
  •  0
  •   Jonathan Corriveau    7 年前

    我需要澄清C/C++的不稳定性,因为这里有一个错误的答案。我从1994年起就一直在为微控制器编程,在那里这个关键字非常有用并且经常需要。

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

    以下是当您需要此关键字作为变量时: -您有一个在中断函数内部写入的变量。 和 -这个变量被读取或写入外部中断函数。 或 如果有两个不同优先级的中断函数使用该变量,那么还应使用“volatile”。

    否则,不需要关键字。

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