Странная инициализация в C

#c #gcc #gcc-warning

#c

Вопрос:

У меня есть этот фрагмент кода, и я не знаю, как он работает

 #include <stdio.h>

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

    printf("%dn", numero); // Prints 20

    return 0;
}
 

Почему, если я удаляю вторую часть (i 10;), компилятор выдает ошибку?
Зачем нужны скобки?

Спасибо ^^!

Ответ №1:

Это выражение оператора GCC. Он выполняет инструкции в нем и возвращает значение, вычисленное в последнем операторе. Таким образом numero , инициализируется 20 . Если вы удалите вторую часть, в качестве последнего оператора не будет выражения, поэтому он не сможет получить значение из выражения оператора.

Фигурные скобки необходимы, чтобы отличить его от обычных выражений, заключенных в скобки.