Ошибка множественного определения в 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, но Я получаю сообщение об ошибке множественного определения, ошибка первого определения здесь.
Как я могу это сделать?
@Sireesha, 👍-1
1 ответ
Лучший ответ:
Если вы хотите, чтобы глобальная переменная была доступна везде, где вы включаете 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 никто не использует константную корректность)
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Преобразование long в массив символов и обратно
- контент» не захватывается
- Получение имени перечисления из экземпляра перечисления
- Некоторые переменные не сохраняют свои значения при выходе из цикла while?
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной