Файл, который на самом деле компилируется, - это то, что выплевывает препроцессор, а не файл source.c.
Итак, если вы поместите int count;
в заголовочный файл, каждый исходный файл, который #include
s заголовок, получит свою собственную копию count
.
В этом случае у вас будет источник, который выглядит следующим образом:
int count;
...
extern int count;
Если вы используете gcc, попробуйте gcc -E file.c
. Это проинструктирует его запускать только препроцессор, чтобы вы могли видеть, что на самом деле подается компилятору.
Как подсказал @Neil, вы захотите объявить int count;
в C-файле. Если вы хотите, чтобы другой файл C мог ссылаться на эту переменную, то вы помещаете объявление extern int count;
в другой файл (или в файл заголовка, который включает другой).
Кстати, одна из моих любимых ошибок в C - это когда вы объявляете глобальную переменную, подобную этой: int count;
, затем в другом файле вы объявляете другую глобальную переменную с тем же именем, но другим типом float count;
. В первом файле вы говорите count = 1
, и внезапно count
во втором файле становится -0.0
. Мораль истории? Избегайте глобальных переменных, и если вы должны их использовать, сделайте их static
.
Элемент списка