2013-05-21 3 views
3

Почему следующий код возвращает ошибку, когда переменная объявляется глобальной.функция назначает переменной в C

int add(int x, int y) { 
    return x+y; 
} 


int ab = add(10, 20); 
int main(void) { 

    printf("%d", ab); 
} 

Но если я называю так:

int add(int x, int y) { 
    return x+y; 
} 


int main(void) { 
    int ab = add(10, 20); // Variable declare inside main 
    printf("%d", ab); 
} 

то выполняется без ошибок.

+5

Параметры области видимости файла могут быть инициализированы только постоянными выражениями. Вызов функции не один. –

ответ

7

Инициализаторы для глобальных переменных должны быть константы, они не могут быть произвольным выражением.

5

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

Глобальные переменные должны быть постоянными при инициализации, и когда вы делаете:

x = func (...) 

Возвращение функции не является постоянной.

3

Из раздела 3.5.7 Инициализация стандарта C:

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

и ab имеет статическую продолжительность хранения, но add() не является постоянным выражением.

2

Глобальные переменные могут быть инициализированы постоянным выражением . Поскольку их значения установлены на времени компиляции и не во время выполнения.

+0

s/постоянное значение/постоянное выражение/ – Jens

+0

@Jens Исправлено, спасибо. – Alex

Смежные вопросы