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