Странная инициализация в C - PullRequest
9 голосов
/ 23 мая 2010

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

#include <stdio.h>

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

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

    return 0;
}

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

Спасибо ^^!

1 Ответ

13 голосов
/ 23 мая 2010

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

Фигурные скобки необходимы для устранения неоднозначности в обычных выражениях в скобках C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...