Составные операторы (блоки) окружены выражениями 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

Ответы на вопрос(2)

Ваш ответ на вопрос