Inicialización extraña en C

1 minuto de lectura

Tengo este fragmento de código y no sé cómo funciona.

#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 recibe un error? ¿Por qué son necesarios los corchetes?

¡Gracias ^^!

avatar de usuario
Johannes Schaub – litb

Es un Expresión de sentencia GCC. Ejecuta las sentencias que contiene y devuelve el valor evaluado en la última sentencia. Por lo tanto numero se inicializa a 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 ordinarias entre paréntesis de C.

¿Ha sido útil esta solución?