ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
986853 Топик полностью
klen (17.03.2020 16:01, просмотров: 389) ответил _Constantin24 на В с/с++ компилятор может вычислять volatile переменные не последовательно? То есть обычные переменные он вправе вычислять непоследовательно(одновременно), если на друг друга не влияют. А что с volatile? 
моя версия, касается gcc - может но не будет! ибо это криминал. начиная с 10 версии gcc кроет матом на конструкцию a+=b ;  если а и b имеют volatile тип. до этого забивался болт, в следующей версии скорее всего это будет ошибка, во всяком случае я бы запретил и понудил пОграммиста написать a=a+b или a=b+a и чтоб он потом не плакал что не понимает в чем большая разница этих выражений.  физика процесса - если не volotile то пишите как хотите и оптимизатор тоже как захочет так и за оптимизирует - нарушения 

логики не будет, а вот с volatile возникают "side effects",   пример из жизни - читаешь регистр железки и в другом все обнуляеццо! а нооборот - читаеш из второго и потом из первого - нет!  вот чтоб учесть специфику железных приколов не ломая стройную модель синтаксиса и семантики языка, логики оптимизаторов и тд - с volatile делайте теперь так!  с другими недоразвитыми (платными) компиляторами все сложнее... но это их проблемы и их приобретателей.