Ситуация следующая: a[b++]=c; a,b,c имеют тип uchar volatile компайлер ругается: Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
Что у меня не так? GCC глотал на "ура"...
zltigo
Jul 6 2008, 14:02
Цитата(Decan @ Jul 6 2008, 15:54)
Что у меня не так?
Черным по белому:
Цитата
the order of volatile accesses is undefined in this statement
Что не понятно? Что при безумном (подумайте зачем Вы их напихали!) количестве volatile разобраться компилятору в том, что Вы от него хотите сложно? Ну "GCC глотал" совершенно ни о чем не говорит без перечня ключей при которых его заставили замолчать.
IgorKossak
Jul 6 2008, 20:28
Цитата(Decan @ Jul 6 2008, 16:54)
a[b++]=c; a,b,c имеют тип uchar volatile
Когда столько volatile переменных в одном выражении, то порядок их вычисления неопределён, о чём и предупреждение. Для полной определённости разбейте выражение на несколько, либо избавьтесь от неоправданных volatile.
navy2000
Jul 7 2008, 06:19
Компилятор все равно разобьет ваше выражение (за один такт он его несомнено не вычислит), а volatile говорит компилятору, что значение переменной может быть изменено где то в другом месте (например в прерывании), и он не понимает, в каком порядке проверять текущие значения переменных при вычислении. Даже если бы компилятор не заругался, эта ситуация нестабильная. Если в процессе вычисления выражения произойдет прерывания и изменится одна из ваших переменных результат вычисления может быть не верным.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.