Вы можете определить структуру в каждом исходном файле, а затем объявить переменную экземпляра один раз как глобальную, а один раз как extern:
// File1.c
struct test_st
{
int state;
int status;
};
struct test_st g_test;
// File2.c
struct test_st
{
int state;
int status;
};
extern struct test_st g_test;
Компоновщик сделает магию, оба исходных файла будут указывать на одну и ту же переменную.
Однако дублирование определения в нескольких исходных файлах является плохой практикой кодирования, поскольку в случае изменений вам придется вручную изменять каждое определение.
Простое решение - поместить определение в заголовочный файл, а затем включить его во все исходные файлы, которые используют структуру. Для доступа к одному и тому же экземпляру структуры в исходных файлах вы все равно можете использовать метод extern
.
// Definition.h
struct test_st
{
int state;
int status;
};
// File1.c
#include "Definition.h"
struct test_st g_test;
// File2.c
#include "Definition.h"
extern struct test_st g_test;