Navigando nei sorgenti del kernel Linux ho trovato some piece of code dove un blocco di istruzioni circondato da parentesi viene trattato come un'espressione a la lisp (o ML), ovvero un'espressione il cui valore è il valore dell'ultima istruzione.Sono dichiarazioni composte (blocchi) circondate da espressioni paren in ANSI C?
Ad esempio:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
Ho cercato in ANSI C grammar cercando di capire come questo pezzo di codice si adatterebbe nella albero sintattico, ma non ho avuto successo.
Quindi, qualcuno sa se questo comportamento è richiesto dallo standard o è solo una peculiarità di GCC?
Aggiornamento: Ho provato con la bandiera -pedantic e il compilatore ora mi dà un avvertimento:
warning: ISO C forbids braced-groups within expressions
È possibile sopprimere l'avviso in GCC inserendo "__extension__" prima della parentesi di apertura. – Flimm