Sind zusammengesetzte Anweisungen (Blöcke) in ANSI C von parens-Ausdrücken umgeben?

Durchsuchen der gefundenen Linux-Kernelquellenein Stück Code Dabei wird ein von Klammern umgebener Anweisungsblock als Ausdruck behandelta la lisp (oder ML), dh ein Ausdruck, dessen Wert der Wert der letzten Anweisung ist.

Zum Beispiel:

int a = ({
    int i;
    int t = 1;
    for (i = 2; i<5; i++) {
        t*=i;
    }
    t;
});

Ich habe mir das angeschautANSI C Grammatik Ich habe versucht herauszufinden, wie dieser Code in den Analysebaum passen würde, aber ich war nicht erfolgreich.

Weiß jemand, ob dieses Verhalten vom Standard vorgeschrieben wird oder nur eine Besonderheit von GCC ist?

Aktualisieren: Ich habe es mit dem Flag -pedantic versucht und der Compiler warnt mich jetzt:

warning: ISO C forbids braced-groups within expressions

Antworten auf die Frage(2)

Ihre Antwort auf die Frage