Поскольку переменная является внешней по отношению к файлу;он определен в другом файле, и вы просто указываете этому файлу, что он существует, но он не найдет его там.Тогда задача компоновщика - решить эту проблему.
Пример:
// a.c
int x = 7;
ac имеет переменную, определенную
// a.h
extern int x;
ah знает, что переменная существует,но он не знает где.Любой файл, содержащий ах, получит эти знания
// b.c
#include "a.h"
bc, поскольку он включает ах, теперь знает, что переменная х существует, но не знает, где.
компоновщикбудет разрешать эти различные использования одной и той же переменной х.Лучше быть такими же, иначе будут проблемы.
Вы можете солгать ах и написать float
вместо int
, и только компоновщик может заметить это, потому что компилятор буквально не имеетзнание о AC (ну, AC должен включать в себя ах, так что он заметит, но вы могли бы лгать ему, если вы не включите его)
Во всем проекте должен быть один и только один неэкстерьеропределение каждой переменной.0 или 2 или более, и компоновщик сообщит об ошибке.