2014-02-07 6 views
0

Я новичок C. Я читал книгу Kernighan & Ritchie и обнаружил, что внешние переменные должны быть инициализированы только с постоянными выражениями. Почему это так? Можете ли вы объяснить мне, что происходит внутри страны? Когда они инициализируются? Почему мы не можем инициализировать внешнюю переменную, используя те, которые были определены до нее?Инициализация внешних переменных в C

ответ

0

Вот ссылка, возможно, даст вам лучшее объяснение. http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/

Они имеют объяснений я привожу ниже:

extern int var = 0; 
int main(void) 
{ 
var = 10; 
return 0; 
} 

Анализ: Угадай эта программа будет работать? Ну, вот еще один сюрприз от стандартов C . Они говорят, что .. если переменная объявлена ​​только , и инициализатор также снабжен этим объявлением, , тогда будет выделена память для этой переменной, то есть эта переменная будет считаться определенной. Поэтому, согласно стандарту C, эта программа будет успешно скомпилироваться и работать.

Надеюсь, это могло бы помочь.

0

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

Основная причина этого заключается в том, что исполняемые операторы нельзя размещать вне функции.

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

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

1

Согласно C99 Стандарт: Раздел 6.7.8:

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

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

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