Я хотел бы предложить альтернативу ответу Джина. По моему опыту, есть два основных способа совместного использования переменных между модулями (единицы компиляции):
1) «Геттеры и сеттеры».
2) Экстерны.
В зависимости от того, с какой командой вы работаете, они предпочтут одну или другую. Функции Си по умолчанию имеют внешнюю связь; вам нужно принудительно установить внутреннюю связь через ключевое слово static перед именем функции, если вы этого не хотите.
1) Геттеры и сеттеры:
// foo.c
#include <stdio.h>
int my_global_var = 0;
...
Тогда вы можете следить за этим с помощью внешних и получающих методов установки. i.e.:
int get_my_global_var(void)
{
return my_global_var;
}
void set_my_global_var(int var)
{
my_global_var = var;
}
Это делается в файле c (модуле). Это будут получатели и установщики смогут вызываться из любого другого модуля, и они получат и установят глобальную переменную my_global_var
.
2) Экстерьеры:
// foo.c
#include <stdio.h>
int my_global_var = 0;
...
Альтернативой геттерам и сеттерам является использование внешних. В этом случае вы ничего не добавляете к модулю, который содержит глобальную переменную, к которой вы хотите получить доступ / изменить (my_global_var
).
// bar.c
#include <stdio.h>
extern int my_global_var;
...
Обратите внимание на синтаксис здесь; когда мы используем ключевое слово extern , мы не инициализируем его как что-либо. Мы просто выводим компилятору, что глобальная переменная my_global_var
имеет внешнюю связь.