2010-05-23 13 views
9

tengo este pedazo de código y no sé cómo funcionainicialización extraño en C

#include <stdio.h> 

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

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

    return 0; 
} 

Por qué si elimino la segunda parte (i + 10;), el compilador obtiene un error? ¿Por qué son necesarios los corchetes?

Gracias ^^!

Respuesta

13

Es un GCC statement expression. Ejecuta las declaraciones en él y devuelve el valor evaluado en la última instrucción. Por lo tanto, numero se inicializa en 20. Si elimina la segunda parte, no hay expresión como la última declaración, por lo que no puede obtener un valor de la expresión de la declaración.

Las llaves son necesarias para eliminar la ambigüedad de las expresiones entre paréntesis C normales.