Составные операторы (блоки) окружены выражениями parens в ANSI C?
Просматривая источники ядра Linux, которые я нашелкакой-то кусок кода где блок операторов, заключенный в круглые скобки, рассматривается как выражениеa la lisp (или ML), то есть выражение, значением которого является значение последнего оператора.
Например:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
Я смотрел наANSI C грамматика пытаясь выяснить, как этот кусок кода поместится в дерево разбора, но я не добился успеха.
Итак, кто-нибудь знает, предписано ли такое поведение стандартом или это просто особенность GCC?
Update: Я пробовал использовать флаг -pedantic, и компилятор теперь выдает мне предупреждение:
warning: ISO C forbids braced-groups within expressions