В C, как вы объявляете членов структуры как изменчивые? - PullRequest
20 голосов
/ 11 июня 2009

Как вы объявляете определенный член структуры как volatile?

Ответы [ 3 ]

32 голосов
/ 11 июня 2009

Точно так же, как не 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;
}

Вы можете пометить все struct как изменчивые, используя "volatile struct _a {...}", но вышеописанный метод предназначен для отдельных полей.

10 голосов
/ 11 июня 2009

Должно быть довольно прямым, согласно этой статье:

Наконец, если вы примените volatile к структура или объединение, все содержимое структуры / объединения являются летучими. Если Вы не хотите такого поведения, вы можете применить изменчивый квалификатор к отдельные члены структура / объединение.

2 голосов
/ 15 мая 2018

Мне нужно уточнить volatile для C / C ++, потому что здесь был неправильный ответ. Я программирую микроконтроллеров с 1994 года, где это ключевое слово очень полезно и часто нужно.

volatile никогда не сломает ваш код, его использование никогда не рискованно. Ключевое слово в основном гарантирует, что переменная не оптимизирована компилятором. Худшее, что может случиться, если вы злоупотребите этим ключевым словом, это то, что ваша программа будет немного больше и медленнее.

Вот когда вам нужно это ключевое слово для переменной: - У вас есть переменная, которая записана внутри функции прерывания. А ТАКЖЕ - Эта же переменная читается или записывается во внешние функции прерывания. ИЛИ ЖЕ Если у вас есть две функции прерывания с различным приоритетом, которые используют переменную, вам также следует использовать 'volatile'.

В противном случае ключевое слово не нужно.

Что касается аппаратных регистров, они должны рассматриваться как изменчивые, даже без ключевого слова, если вы не делаете странные вещи в своей программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...