Являются ли блоки кода внутри скобок в C/C++ допустимыми и может ли MSCL скомпилировать их?

У меня есть следующий код:

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 принять его?

2 ответа

Решение

Не знаю ничего о MSCL части вопроса, так как я всегда использовал GCC. И в GCC:

1) это называется выражением составного оператора;

2) это нестандартное расширение GCC.

Вместо выражения составного оператора, почему бы не использовать оператор запятой и просто написать:

x = ( 1, 2, 3 );
Другие вопросы по тегам