Могу ли я инициализировать глобальную переменную с результатом вызова функции? - PullRequest
12 голосов
/ 14 июня 2011

Допустим ли следующий код?

int add(int a, int b)
{
    return a + b;
}

int myvar = add(1, 2);

int main() { /* ... */ }

Почему или почему нет?

1 Ответ

19 голосов
/ 14 июня 2011

Да. Да, это так.

Статические инициализаторы могут вызывать функции, если они находятся в области действия.

[dcl.decl] (редакция 2003 г., 8/2):

Можно также указать начальные значения в деклараторе ; инициализаторы обсуждается в 8.5 и 12.6.

[dcl.init] (редакция 2003 г., 8.5 / 2):

Автоматический, регистр, статический , и внешние переменные области имен можно инициализировать произвольно выражения с использованием литералов и ранее объявленные переменные и функции .

(Не вводите в заблуждение отсутствие ключевого слова static, которое имеет всевозможные значения. Ваша переменная myvar объявлена ​​в области имен и, следовательно, имеет статическая продолжительность хранения . )

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