Глобальная константа в заголовочном файле - C (СИ)
Формулировка задачи:
Всем привет, я пишу небольшую библиотечку для работы с микроконтроллером Atmega8, используя среду CV AVR.
я создал заголовочный файл с таким содержанием
этот хидер инклюдится в main.c и DATime.c
Мне необходимо объявить константу Нуль времени, такую чтобы её было видно во всех файлах куда подключается хидер. однако если я объявляю её следующим образом
то получаю ошибку линкера, о том что выражение было redefined, хотя я нигде не использую эту константу.
Если призвать на помощь extern, и написать
то получу ту же самую ошибку о том что выражение было redefined.
если я уберу определение константы, то не возникнет никаких ошибок, однако структура будет неинициализирована ...
в каком месте я допускаю ошибку скажите пожалуйста. как сделать эту структуру глобальной ?
#ifndef _DATIME_H_
#define _DATIME_H_
#include "da_types.h"
typedef struct
{
uint16 ms;
uint8 sec;
uint8 min;
uint16 hour;
} Time;
//const Time TIME_NULL = {0, 0, 0, 0};
#pragma used-
Time summ(Time, Time);
Time time_max(Time, Time);
Time duration(Time, Time);
uint32 duration_s(Time, Time);
uint32 duration_m(Time, Time);
uint16 duration_h(Time, Time);
#pragma used+
#endifconst Time TIME_NULL = {0, 0, 0, 0};extern const Time TIME_NULL = {0, 0, 0, 0};Решение задачи: «Глобальная константа в заголовочном файле»
textual
Листинг программы
#include "def.h"
int main(void) {
printf(__FILE__ ": %d\n", c);
print_c();
assign_c(1);
printf(__FILE__ ": %d\n", c);
print_c();
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл
def.h - В функции main() выводим текущий файл и значение переменной c с помощью функции printf()
- Вызываем функцию print_c() для вывода значения переменной c
- Присваиваем переменной c значение 1 с помощью функции assign_c()
- Выводим текущий файл и новое значение переменной c с помощью функции printf()
- Снова вызываем функцию print_c() для вывода нового значения переменной c
- Завершаем работу функции main() и программы в целом, возвращая 0