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

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

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

Всем привет, я пишу небольшую библиотечку для работы с микроконтроллером Atmega8, используя среду CV AVR. я создал заголовочный файл с таким содержанием
Листинг программы
  1. #ifndef _DATIME_H_
  2. #define _DATIME_H_
  3. #include "da_types.h"
  4. typedef struct
  5. {
  6. uint16 ms;
  7. uint8 sec;
  8. uint8 min;
  9. uint16 hour;
  10. } Time;
  11. //const Time TIME_NULL = {0, 0, 0, 0};
  12. #pragma used-
  13. Time summ(Time, Time);
  14. Time time_max(Time, Time);
  15. Time duration(Time, Time);
  16. uint32 duration_s(Time, Time);
  17. uint32 duration_m(Time, Time);
  18. uint16 duration_h(Time, Time);
  19. #pragma used+
  20. #endif
этот хидер инклюдится в main.c и DATime.c Мне необходимо объявить константу Нуль времени, такую чтобы её было видно во всех файлах куда подключается хидер. однако если я объявляю её следующим образом
Листинг программы
  1. const Time TIME_NULL = {0, 0, 0, 0};
то получаю ошибку линкера, о том что выражение было redefined, хотя я нигде не использую эту константу. Если призвать на помощь extern, и написать
Листинг программы
  1. extern const Time TIME_NULL = {0, 0, 0, 0};
то получу ту же самую ошибку о том что выражение было redefined. если я уберу определение константы, то не возникнет никаких ошибок, однако структура будет неинициализирована ... в каком месте я допускаю ошибку скажите пожалуйста. как сделать эту структуру глобальной ?

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

textual
Листинг программы
  1. #include "def.h"
  2.  
  3. int main(void) {
  4.     printf(__FILE__ ": %d\n", c);
  5.     print_c();
  6.  
  7.     assign_c(1);
  8.  
  9.     printf(__FILE__ ": %d\n", c);
  10.     print_c();
  11.  
  12.     return 0;
  13. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы