Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятки с volatile
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Decan
Доброго времени суток!

Ситуация следующая:
a[b++]=c;
a,b,c имеют тип uchar volatile
компайлер ругается:
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement

Что у меня не так? GCC глотал на "ура"...
zltigo
Цитата(Decan @ Jul 6 2008, 15:54) *
Что у меня не так?

Черным по белому:
Цитата
the order of volatile accesses is undefined in this statement

Что не понятно? Что при безумном (подумайте зачем Вы их напихали!) количестве volatile разобраться компилятору в том, что Вы от него хотите сложно? Ну "GCC глотал" совершенно ни о чем не говорит без перечня ключей при которых его заставили замолчать.
IgorKossak
Цитата(Decan @ Jul 6 2008, 16:54) *
a[b++]=c;
a,b,c имеют тип uchar volatile

Когда столько volatile переменных в одном выражении, то порядок их вычисления неопределён, о чём и предупреждение.
Для полной определённости разбейте выражение на несколько, либо избавьтесь от неоправданных volatile.
navy2000
Компилятор все равно разобьет ваше выражение (за один такт он его несомнено не вычислит), а volatile говорит компилятору, что значение переменной может быть изменено где то в другом месте (например в прерывании), и он не понимает, в каком порядке проверять текущие значения переменных при вычислении.
Даже если бы компилятор не заругался, эта ситуация нестабильная. Если в процессе вычисления выражения произойдет прерывания и изменится одна из ваших переменных результат вычисления может быть не верным.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.