У меня есть следующий код:
int x;
x = ({ 1; 2; 3; });
printf("%d\n", x); // should be 3
(Если вам любопытно, почему я когда-либо писал бы такой отвратительный код. Ответ таков: я не пишу. Я пишу генератор, который выводит код на языке C, и наличие такого утверждения сделает вещи намного проще.)
Код компилируется и работает на Apple LLVM версии 7.0.2 (с предупреждениями о неиспользованном коде, конечно), но не работает с MSCL 10.0 и 14.0 (ошибка C2059: синтаксическая ошибка: ‘{‘).
Мой вопрос: 1) есть ли название для этого вида кода (-abuse)? 2) Законно ли это в каком-либо стандарте C / C ++? 3) Есть ли способ заставить MSCL принять его?
Не знаю ничего о MSCL части вопроса, так как я всегда использовал GCC. И в GCC:
1) это называется составное выражение;
2) это нестандартное расширение GCC.
Вместо выражения составного оператора, почему бы не использовать оператор запятой и просто написать:
x = ( 1, 2, 3 );