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