Jump to content

    

Не компилируется &&= в C++

2 hours ago, razrab83 said:

в случае int c = a - b (см выше) - криминала нет, даже если есть ворнинг. (при условии, что int 4 байта и это 32-х битный проц). Какая разница в каком порядке а и бэ? Ну обратится сначала к "а", потом к "b" - или наоборот?

Если эти а и бэ - не просто переменные, а какие-нибудь регистры (о чём, в общем случае, компилятору неведомо), то от перестановки слагаемых можно поиметь оооочень интересные грабли в случае "для сброса флага считать регистр статуса, потом регистр данных".

Share this post


Link to post
Share on other sites
6 минут назад, esaulenka сказал:

Если эти а и бэ - не просто переменные, а какие-нибудь регистры...

Мы обсуждаем не гипотетические случаи, а конкретный макрос. В данном случае это указатель кольцевого буфера (хоть программный, хоть аппаратный). RP судя по всему изменяется только тут (в функции чтения буфера), RW в другом месте/местах. Что с того что указатели буфера в макросе будут считаны в произвольном порядке?

Share this post


Link to post
Share on other sites
2 minutes ago, razrab83 said:

Что с того что указатели буфера в макросе будут считаны в произвольном порядке?

Тут - очевидно, ничего. Осталось только объяснить этот конкретный случай компилятору.

 

Вопрос, на самом деле, интересный. Я никогда активно не пользовался IAR'ом (только какие-то чужие проекты собрать), но с варнингом "два volatile'а в одном выражении" сталкивался. Вот только где, блин?..

Share this post


Link to post
Share on other sites
8 минут назад, esaulenka сказал:

Осталось только объяснить этот конкретный случай компилятору.

В 27.07.2011 в 22:57, zltigo сказал:

Если уверны, что ни к каким побочным эффектам в данном выражении проблема с тем, что переменная volatile, не приведет (а это обычное дело при помянутой Вами передаче в функции), то просто

прикройте предупреждение с этом конкретном месте прагмой.

#pragma diag_suppress=Pa082

......

......

#pragma diag_warning=Pa082

Share this post


Link to post
Share on other sites
12 минут назад, esaulenka сказал:

Вопрос, на самом деле, интересный. Я никогда активно не пользовался IAR'ом (только какие-то чужие проекты собрать), но с варнингом "два volatile'а в одном выражении" сталкивался. Вот только где, блин?..

У меня та же самая ситуация. Но думаю всё же, что это IAR-специфичный warning.

Share this post


Link to post
Share on other sites

Я, конечно, понимаю желание отстоять свою точку зрения, но мне почему-то кажется, что написать исходное выражение в две строчки (прочитать во временную переменную a, вычесть бэ) сильно проще, чем писать прагмы.

 

Я уж не говорю о переносимости этих прагм...

Share this post


Link to post
Share on other sites

ps 2Сергей Борщ

Хороший функционал, сказал что-то, потом подумал/почитал другие сообщения, и понял что последнее сообщение лишнее/неуместно - удалил. Но этот функционал я так понял имеют только избранные модеры (не нашел где я могу удалить своё сообщение). А этого функционала очень не хватает простым смертным. Понятно, что удалалять сообющения шерстить форум в праве только модераторы. Но дайте возможность удалять свои сообщения , хотя бы до того момента, пока моё сообщение последнее? А то приходится его просто редактировать и вместо всего текста писать одну букву. 

Share this post


Link to post
Share on other sites

Не возбуждайтесь. Я прочитал ваше сообщение на предыдущей странице и, не заметив, что есть еще вторая страница, ответил на него. После публикации увидел предыдущие сообщения и в первом же после вашего, на которое я отвечал, было написано то же самое, что написал я. Именно поэтому я свое сообщение удалил. Удаление сообщений у меня никакими особыми флажками не помечено, я понятия не имею, что оно для своих сообщений доступно только модераторам. Так что на его отсутствие у себя жалуйтесь в лигу сексуальных реформ администраторам в соотвествующем разделе.

Share this post


Link to post
Share on other sites
15 часов назад, Сергей Борщ сказал:

Я прочитал ваше сообщение на предыдущей странице и, не заметив, что есть еще вторая

я так и сказал (нужное подчеркнуть): "сказал что-то, потом подумал/почитал другие сообщения, и понял что последнее сообщение лишнее/неуместно - удалил."

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now