Spec-Zone.ru › GCC 10

Далее: Деклараторы, Предыдущее: Структуры, Объединения, Перечисления и Битовые поля, Вверх: Реализация C — определённое поведением поведение [Оглавление][Индекс]

4.10 Квалификаторы ¶

  • Что считается доступом к объекту, имеющему тип с квалификатором volatile (C90 6.5.3, C99 и C11 6.7.3).

    Такой объект обычно обращается через указатели и используется для доступа к аппаратуре. В большинстве выражений интуитивно понятно, что является чтением, а что записью. Например

    volatile int *dst = somevalue;
    volatile int *src = someothervalue;
    *dst = *src;

    вызовет чтение объекта volatile, на который указывает src, и сохранит значение в объект volatile, на который указывает dst. Нет гарантии, что эти чтения и записи атомарны, особенно для объектов размером больше int.

    Однако, если хранилище volatile не изменяется и значение хранилища volatile не используется, ситуация менее очевидна. Например

    volatile int *src = somevalue;
    *src;

    Согласно стандарту C, такое выражение является выражением-значением (rvalue), тип которого — неквалифицированная версия его исходного типа, то есть int. Будет ли GCC интерпретировать это как чтение объекта volatile, на который указывает указатель, или только как запрос на вычисление выражения для его побочных эффектов, зависит от этого типа.

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

    Когда объект агрегатного типа с таким же размером и выравниванием, как скалярный тип S, является объектом доступа volatile в выражении присваивания или атомной функции, доступ к нему выполняется так, как если бы объявленный тип объекта был volatile S.

Далее: Деклараторы, Предыдущее: Структуры, объединения, перечисления и битовые поля, Вверх: Реализация C — определённое поведением поведение [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/Qualifiers-implementation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API