чтобы просто описать проблему, пожалуйста, ознакомьтесь с приведенным ниже кодом:
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
Буду признателен, кто бы ни объяснил эту простую проблему.
btw вы могли найти мою оригинальную программу и оригинальную проблему в # 7 в this Китайский сайт (необязательно)
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 - новый вопрос, отличный от оригинального). Я верну его ответ снова, потому что он, конечно же, избегает предупреждений.:)
Если я решил задать новый вопрос, я обновлю этот вопрос, чтобы добавить ссылку.