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?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad