ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
853541 Топик полностью
sladkoejka (06.07.2018 15:07 - 15:15, просмотров: 466) ответил SciFi на поциент слился
Я не вижу смысла с вами спорить. Насчёт volatile указателей пример я вам привел. Продублирую и тут:  #include <stdio.h> void main( void ) { int x = 123; *(volatile int*)&x; } Результат компиляции с оптимизациями:
main:
    0080BA    81             RET
По вашей логике компилятор не имел права оптимизировать присвоение переменной и обращение к ней по указателю, т.к. указатель помечен как volatile. Однако на деле компилятор выбросил весь код из main, вместе c volatile указателем. И по моей логике это соответствует стандарту. И вот почему. Переменная локальная и никем кроме main использоваться не может. Указатель на неё тоже локальный и за пределами main никому не доступен. Соответственно выкидывание кода ни на что не влияет. Что оптимизатор и сделал - просто выбросил весь код, вместе с volatile указателем. И на поведении кода это никак не отразилось, он как ничего не делал, так и не делает. Несмотря на volatile.
image