чтобы просто описать проблему, взгляните на код ниже:
int main()
{
int a=123;
({if (a) a=0;});
return 0;
}
Я получил это предупреждение от [-Wsequence-point]
Line 4: warning: operation on 'a' may be undefined
моя версия g++ 4.4.5
Я буду признателен тому, кто объяснит эту простую проблему.
Кстати, вы можете найти мою исходную программу и исходную проблему в #7 в этом Китайский сайт (не обязательно)
UPD1:
хотя изменение кода на ({if(a) a=0; a;})
может избежать предупреждения, но я понял, что настоящая причина проблемы может быть не в The last thing in the compound statement should be an expression followed by a semicolon
.
потому что документальный фильм также сказал If you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value
.
пример может показать это:
int main()
{
int a=123, b;
({;});
({if (a) b=0;});
return 0;
}
и этот код не получил предупреждений! поэтому я думаю, что настоящая причина связана с точкой следования.
пожалуйста помоги!
UPD2:
извините @AndyProwl за то, что не принял его ответ, который был принят до UPD1. следуя его совету, я могу задать новый вопрос (UPD1 - новый вопрос, отличный от исходного). Я снова приму его ответ, потому что он все равно избегает предупреждений. :)
Если я решил задать новый вопрос, я обновлю этот вопрос, чтобы добавить ссылку.
a
. Это УБ. - person   schedule 30.05.2013