Глобальная константа в заголовочном файле - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, я пишу небольшую библиотечку для работы с микроконтроллером Atmega8, используя среду CV AVR. я создал заголовочный файл с таким содержанием
#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+
 
#endif
этот хидер инклюдится в main.c и DATime.c Мне необходимо объявить константу Нуль времени, такую чтобы её было видно во всех файлах куда подключается хидер. однако если я объявляю её следующим образом
const Time TIME_NULL = {0, 0, 0, 0};
то получаю ошибку линкера, о том что выражение было redefined, хотя я нигде не использую эту константу. Если призвать на помощь extern, и написать
extern const Time TIME_NULL = {0, 0, 0, 0};
то получу ту же самую ошибку о том что выражение было redefined. если я уберу определение константы, то не возникнет никаких ошибок, однако структура будет неинициализирована ... в каком месте я допускаю ошибку скажите пожалуйста. как сделать эту структуру глобальной ?

Решение задачи: «Глобальная константа в заголовочном файле»

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;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл def.h
  2. В функции main() выводим текущий файл и значение переменной c с помощью функции printf()
  3. Вызываем функцию print_c() для вывода значения переменной c
  4. Присваиваем переменной c значение 1 с помощью функции assign_c()
  5. Выводим текущий файл и новое значение переменной c с помощью функции printf()
  6. Снова вызываем функцию print_c() для вывода нового значения переменной c
  7. Завершаем работу функции main() и программы в целом, возвращая 0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы