Здравствуйте, m11, Вы писали:
m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.
Это просто чтение значение переменной. После это значение не используется и просто теряется. Прикол в том, эта вещь применяется. Например, если устройство замапировано на адрес памяти, а чтение по специальному адресу например сбрасывает флаги устройства. Как-то так:
m11>>>Почему это компилится? m11>>>без ошибок.
AD>>А в каком месте должна быть ошибка?
m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.
А причем здесь "оператор"?
Упрощенно выражаясь, тело функции на языках С или С++ состоит из инструкций (statements). Statements бывают разных видов. Один из самых распространенных — expression statement, то есть выражение. `value;` — это вполне легальный expression statement.
Другое дело, что выражения мы обычно используем ради их результатов и/или побочных эффектов. Если у выражения и результат игнорируется, и побочных эффектов нет, то такое выражение бесполезно. Компилятор может выдать на эту тему предупреждение, если захочет. Но ошибки в этом нет.
AD>Видимо думают, что без uint32_t tmp = значение не прочитается ))
Оно только с volatile будет читать.
по идее с uint32_t tmp = должно всегда читать и без volatile
AD>PS: причём тут паскаль, если форум про си и плюсы?
Ну вроде как родственые языки. чесно говоря не ожидал такого от С++.
И куда смотрит комитет? Это источник же ошибок не?
Здравствуйте, m11, Вы писали:
m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.
Да. В Си выражение является оператором. Вызов функции — это выражение, присваивание — это выражение (у него даже значение есть). А отдельного оператора присваивания в Си нет.
Предупреждения ты заслуживаешь за то, что твое выражение ничего вообще не делает. Но ошибкой это не является.
Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>А причем здесь "оператор"?
АТ>Упрощенно выражаясь, тело функции на языках С или С++ состоит из инструкций (statements). Statements бывают разных видов. Один из самых распространенных — expression statement, то есть выражение. `value;` — это вполне легальный expression statement.
Оператор — это и есть statement. Так уж наши переводчики придумали, еще в советские времена.
И да, действительно, в си нет оператора присваивания, зато есть оператор — выражение.
Здравствуйте, ArtDenis, Вы писали:
m11>>а почему тут нету C4716: '': must return a value ????
AD>Потому что согласно стандарту языка, выход из функции main аналогичен возврату нулевого значения.
А почему только из main? Где логика %\
Это до чего довели язык из других функций нельзя а из main можна ;|
m11>>>Почему это компилится? m11>>>без ошибок.
AD>>А в каком месте должна быть ошибка?
m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.
По-хорошему должны быть ошибки типа:
"Ваш код не делает ничего полезного"
"Ваш код дублирует функциональность доступных публичных библиотек"
"Вы никчемный программист, найдите себе другое занятие"