Вы должны быть осторожны здесь.«Глобальные» переменные - это переменные, которые доступны в любой точке кода, но в стандарте нет формального определения глобального - в нем используются более формальные термины, такие как область действия, продолжительность хранения и связь.
Применяется одно определение глобальногок одному файлу другой может применяться к нескольким файлам.
При определенной настройке, если вы включите этот заголовочный файл в несколько исходных файлов C, а затем попытаетесь скомпоновать их вместе, вы получите ошибки связи, потому что каждыйобъектный файл имеет свою собственную копию переменных, и они все пытаются их экспортировать.
Если вы хотите, чтобы ваши переменные были глобальными для одного источникафайл, поместите их в верхнюю часть этого исходного файла и сделайте их статичными (фактически невидимыми для компоновщика):
static int state;
Это означает, что каждая функция в этом файле может получить их, но они не мешаютдругие файлы.
Однако, если вы хотите, чтобы ваши переменные были глобальными для всех исходных файлов, поместите объявление in файл заголовка и определение в одном исходном файле на языке C.Объявление объявляет, что что-то существует, в то время как определение создает его:
something.h:
extern int state; // declare it
file1.c:
#include "something.h" // declare it (in header)
int state; // AND define it.
// Now you can use state anywhere.
file2.c:
#include "something.h" // declare it (in header)
// Now you can use state anywhere.
Это означает, что есть одна копия state
, к которой имеют доступ все файлы.
С точки зрения использования глобальных переменных, его, как правило, следует избегать, насколько это возможно.Их использование значительно усложняет инкапсуляцию и подвергает манипуляциям ваш код извне.
Основное правило - использовать наименьшую возможную область видимости для любого отдельного элемента, что все же позволяет вам достичь ваших целей.И иногда это означает передачу вещей вокруг.
Если вы действительно не хотите передавать их, по крайней мере изолируйте все данные и код, который ими манипулирует, в один файл, чтобы вы могли скрыть это,способ.