2010-05-23 18 views
9

ho questo pezzo di codice e non so come funzionainizializzazione Strano in C

#include <stdio.h> 

int main(void) 
{ 
    int numero = ({const int i = 10; i+10;}); 

    printf("%d\n", numero); // Prints 20 

    return 0; 
} 

Perché se cancello la seconda parte (i + 10;), il compilatore ottiene un errore? Perché le parentesi sono necessarie?

Grazie ^^!

risposta

13

È un GCC statement expression. Esegue le istruzioni in esso e restituisce il valore valutato nell'ultima istruzione. Pertanto, numero viene inizializzato su 20. Se si elimina la seconda parte, non esiste alcuna espressione come ultima istruzione, quindi non può ottenere un valore dall'espressione dell'istruzione.

Le parentesi graffe sono necessarie per distinguerlo dalle normali espressioni parentesi C.