2013-09-16 1 views
0
extern int i;// is a declaration 
int j; //definition 

автор дал, что первый оператор представляет собой декларацию, а второй как определение. Я считаю, что второй оператор является декларацией и сначала как определение.Как определяются внешние переменные?

я прошел полный эталонным С Гербертом Schildt

+0

Можете ли вы дать цитату из своей книги, которая поддерживает ваше утверждение? –

ответ

2
extern int i 

... это variable declaration, так как он только говорит составитель «существует переменная i, но он определен где-то еще».

int i 

... - это переменное определение, поскольку оно сообщает компилятору создать действительную переменную.

0

Ключевое слово extern используется для объявления внешних переменных, поэтому книга правильная.

Существует одно исключение, если инициализатор добавляется, то это не определение:

extern int i = 42; 
0

Во-первых, ни первый не второй является «утверждение». В заявлениях на языке C нет утверждений. Объявления - это декларации, заявления - заявления. В C это два независимых непересекающихся мира.

Во-вторых, каждое определение является декларацией в то же время. Определение - это всего лишь особый вид декларации. Таким образом, неверно конформировать декларации, и определения являются таким взаимоисключающим способом.

В-третьих, то, что говорят комментарии, является правильным, и вы ошибаетесь. Первая - не определяющая декларация. Второй - это определение .

В-четвертых, второе - это так называемое условное определение - особенность C. Он обладает некоторыми своеобразными свойствами. В общем случае он не обязательно определяет переменную с внешняя связь. Связь переменной, которую она определяет, может зависеть от контекста. В вашем конкретном примере, взятом буквально, он действительно определяет переменную с внешней связью. Вы можете найти на сайте условное определение, чтобы узнать больше об этом.

В-пятых, книги Шильдта созревают с огромным количеством терминологических ошибок (а не только терминологических). Это на самом деле то, что они в основном известны.

0

декларация: переменная объявлена ​​только

Ex: int i; 

определение: переменная declaration+its initialization со значением.

Ex: int i=10; 

В вашем случае

extern int i;// is a declaration  
//because you did not initialize value to i here. 

Предполагая, что J является глобальной переменной. то он инициализируется ZERO во время объявления.
Здесь declaration+initialization =definition

int j; //definition 

если J является локальным, то это только декларация.