Являются ли блоки кода внутри скобок в 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.

8

Другие решения

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

x = ( 1, 2, 3 );
1

По вопросам рекламы [email protected]