Ошибка множественного определения в STM32CubeIDE

Как работают объявления глобальных переменных?

Например:

В файле1.c я определяю:

#define volt_add 0x20

uint8_t vol[8]= {0x53, 0x35, 0x05, 0x22, volt_add,0x00,0x00,0x00};

uint16_t EM_vol;

Мне нужно использовать все указанные выше переменные в file2.c.

Я пытался определить их в файле global.h и включил этот файл как в file1.c, так и в file2.c, но Я получаю сообщение об ошибке множественного определения, ошибка первого определения здесь.

Как я могу это сделать?

, 👍-1


1 ответ


Лучший ответ:

2

Если вы хотите, чтобы глобальная переменная была доступна везде, где вы включаете global.h, вам потребуется объявление этой переменной в заголовке (только деклаация):

// globals.h:
extern uint8_t vol[8];

Где-либо еще вы можете #include "global.h"

Но должен быть один файл cpp или c с:

#include "global.h"
uint8_t vol[8]= {0x53, 0x35, 0x05, 0x22, volt_add,0x00,0x00,0x00};

Если вы сделаете это определение в заголовке или более чем в одном файле .c, вы получите множественную ошибку определения.

Другой способ — сделать его статическим и сделать полное определение в заголовке, однако каждая единица компиляции будет использовать свой собственный экземпляр, и он не будет виден из других единиц компиляции (единица компиляции == каждый файл c, скомпилированный в собственный .o файл). Это проблема микроконтроллеров, и если вы даже захотите в нее что-то записать, это будет полный беспорядок (хотя в C никто не использует константную корректность)

,