Энергозависимая семантика в C99

OP запрашивает способ выделения ошибок PEP8 в PyCharm, но есть и другой способ (гораздо более понятный, на мой взгляд), чтобы увидеть нарушения (извлечено из документации PyCharm ). Открытый код | Изучите код и друзей:

Окно инструмента проверки

Просмотр | Инструмент Windows | Проверка:

  • Вы можете получить доступ к окну инструмента таким образом, только когда оно уже открыто через Код | Проверьте код.
  • После того, как вы вручную отключили окно инструментов, нажав кнопку «Закрыть», окно инструментов снова станет доступно только через Код | Проверьте код. Окно инструмента проверки отображает результаты проверки на отдельных вкладках

Только что протестировал его на PyCharm Community Edition , и он работал как брелок (нет игра слов каламбур).

12
задан Skurmedel 11 June 2009 в 14:14
поделиться

2 ответа

При чтении стандарта здесь кажется, что указатель является изменчивым, но не фактическое содержимое самой структуры. Я интерпретировал это из приведенного примера, const t * volatile p (внизу ссылки). Формулировка, однако, расплывчата, но я думаю, что это был бы аналогичный пример:

struct foo {
    int bar;
};

struct foo *volatile x;

Обратите внимание, что я не пробовал это, поэтому я могу быть совершенно неверным ... это просто то, что я понял из беглого прочтение стандарта.

Кроме того, cdecl устраняет некоторые неясности. Например:

cdecl> объяснить volatile struct x * foo
объявить foo как указатель на volatile struct x

, тогда как:

cdecl> объяснять struct x * volatile foo
объявить foo как изменчивый указатель на структуру x

В одном случае структура является изменчивой.

2
ответ дан 2 December 2019 в 23:20
поделиться

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

Расширение моего ответа volatile - это расслабленный атомарный объект, что означает, что доступ является атомарным, а инструкции - нет. Таким образом, вы не можете безопасно увеличивать или уменьшать изменчивый указатель, поэтому вы не можете использовать изменчивый указатель для взаимодействия, а только операции сохранения / загрузки (присваивания). То же самое касается int или другого числа, и volatile также не будет работать с числами с плавающей запятой, потому что они обрабатываются в конвейере FPU, а не в ЦП. В общем, volatile не слишком полезны, но компиляторы Microsoft автоматически помещают защиту инструкций вокруг volatiles, делая их истинными атомарными значениями, но это не является частью стандарта.

4
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: