Библиотеки не включены правильно

Я обнаружил следующее неожиданное поведение, и мне интересно узнать его причину.

header.h:

#include <Time.h>
[...]

main.ino:

#include "header.h"
#include <Time.h>
[...]

Мой код работает правильно с этой настройкой. Однако, если я закомментирую библиотеку Time.h в своем main.ino, мой код перестанет работать правильно:

#include "header.h"
//#include <Time.h>
[...]

Я все еще могу получить доступ к функциям Time.h, но они возвращают ошибочное время.

Почему я должен включать библиотеку в свой *.ino, хотя я уже включил ее в свой заголовочный файл? Есть ли наилучшая практика, где включать библиотеки? Должен ли я просто всегда включать все библиотеки в мои файлы *.h и *.ino?

, 👍0

Обсуждение

вы хотите time.h или TimeLib.h? Time.h неоднозначно, @Juraj


1 ответ


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

1

Во-первых, вы должны включить TimeLib.h, а не Time.h — имя заголовка библиотеки было изменено, чтобы избежать конфликтов в системах, нечувствительных к регистру (Windows), и внутренний заголовок time.h во многих компиляторах.

Во-вторых, вы всегда должны включать все свои библиотеки напрямую в файл INO. Это связано с тем, что среда IDE анализирует файл INO перед компиляцией в поисках включенных библиотек. Затем он добавляет эти найденные библиотеки в список библиотек, которые необходимо скомпилировать. Без этого вы не сможете правильно скомпилировать исходный код для своих библиотек.

,

Да! Это (во-вторых) также часто относится к #include <Wire.h>, если другая библиотека использует I2C., @DataFiddler

@DataFiddler И SPI и т. д., @Majenko

Я не включаю библиотеки. сборщик Arduino может справиться с этим. Я использую Ethernet.h без SPI.h в скетче, UnoWiFiDevEdSerial1.h без Wire.h в скетче, ..., @Juraj

@Juraj Пока вы используете версию IDE, которая использует Arduino Builder, или, конечно, UECIDE, которая делает это изначально. Для всех остальных в мире (например, для тех дураков, которые apt-get install arduino, или идиотов, которые используют плагины для eclipse или VS;)) это не сработает. Так что лучше включить их в любом случае, так как нет минусов, только плюсы. Конечно, если никто другой не использует ваш код, это нормально..., @Majenko