определения создает пространство для переменного:
int c;
Где бы вы поставить эту строку, либо локальным, глобальным, это говорит о том, что новая переменная c
типа int
должна ожить.
extern int c;
декларация говорит, что есть где-то еще какая-то переменная c
типа int
. Используя extern
, вы говорите, что c
определен где-то в другом месте. Если вы укажете только объявление extern
без определения где-то еще, у вас будет ошибка ссылки. Использование EXTERN является эквивалентом упреждающего объявления функции:
/* declaration */
int f(int x);
против
/* definition */
int f(int x) {
return x*x;
}
Первого означает, что есть где-то функция f
возвращающие int
и принятие в int
в качестве параметра. Последняя - это фактическая функция, ее код, который также работает как декларация, так и определение.
IMO, это объявление с обозначением vs-definition запутанно.Я почти не помню, что это такое, и мне обычно нужно об этом думать. Вы должны, однако, понять, что означает extern
и что такое форвардная декларация.
Первый означает, что где-то 'c' определяется как 'int'. – LPs
Оба являются декларациями. в зависимости от того, где он размещен, второй - ** также ** определение или определение _. – Olaf