Объявить и определить глобальную переменную только в 1 .c
файле и использовать от extern
до объявить глобальную переменную только в других .c
файлах.
Пример с 3 исходными файлами: g.h
, g1.c
и g2.c
:
/*
* g.h
*/
typedef struct my_global_type {
int my_field;
} my_global_type;
void g2();
/*
* g1.c
*/
#include <stdio.h>
#include "g.h"
my_global_type my_global_variable;
int main() {
my_global_variable.my_field = 1;
printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);
g2();
printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);
return 0;
}
/*
* g2.c
*/
#include <stdio.h>
#include "g.h"
extern my_global_type my_global_variable;
void g2() {
printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);
my_global_variable.my_field = 2;
printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);
}
Вы компилируете с помощью:
gcc -o g g1.c g2.c
И выполнение говорит:
./g
in main: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=2
in main: my_global_variable.my_field=2