Spec-Zone.ru › GCC 5

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; в других случаях выражение вычисляется только для побочных эффектов.

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

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

Spec-Zone.ru

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