У меня проблема с кодом низкого уровня, который я пишу, мне нужно использовать объекты как изменчивые, но это не обязательно, так что я хочу, чтобы типы были объявлены как изменчивые (для повторного использования). Однако я могу определить указатель на квалифицированный вариант структуры, подробно описанный в следующем сегменте.Летучие семантики в C99
struct x {
int bar;
};
struct x foobar;
...
volatile struct x *foo = &foobar;
Теперь Foo фактически является указатель на объект типа:
volatile struct x {
volatile int x;
};
так изменчиво применяется ко всем членам структуры. Теперь мой вопрос в том, когда объект содержит указатель на другой объект, как применяется летучесть?
struct x {
struct y *bar;
};
будет указатель на летучем экземпляр х, то тогда относиться к этому как:
volatile struct x {
struct y * volatile bar;
};
или как:
volatile struct x {
volatile struct y * volatile bar;
};
Я прочитал стандарт C, и не очень ясен в этом отношении, и я могу легко интерпретировать формулировку несколькими способами.
http://www.netrino.com/node/80 Кажется, что поддерживает эту идею. Я никогда не читал на волевых. Хорошая вещь. – Kieveli
«volatile не слишком полезны»: не знают о программном обеспечении ПК, но во встроенных системах они необходимы для объявления аппаратных регистров или переменных, которые могут быть изменены в прерываниях. –
Очень хорошая точка! Прошло несколько лет с момента моего последнего встроенного проекта, поэтому я забыл об этом. В любом случае, это сработало, потому что это было для грузов и магазинов. На ПК легко забыть о большинстве прерываний, поскольку они абстрагируются от ОС api. –