Abhängigkeit der RTClib-Bibliothek von der Wire-Bibliothek

7

Ich habe die RTClib-Bibliothek von https://github.com/adafruit/RTClib heruntergeladen . In jedem bereitgestellten Beispiel #include <Wire.h>steht unmittelbar oben #include "RTClib.h"in der Skizze.

Warum ist das notwendig? Ich weiß, dass die RTClib-Bibliothek die Funktionalität der Wire-Bibliothek erfordert, aber wenn dies der Fall ist, warum kann ich nicht einfach ganz #include <Wire.h>oben auf RTClib.h stehen? Letzteres habe ich versucht, auch wenn ich nur die folgende Skizze verwendet habe, aber meine Skizze konnte nicht kompiliert werden.

RTClib.h:

// Code by JeeLabs http://news.jeelabs.org/code/
// Released to the public domain! Enjoy!

#ifndef _RTCLIB_H_
#define _RTCLIB_H_

#include <Wire.h>
...

#endif // _RTCLIB_H_

Skizzieren:

#include "RTClib.h"
void setup() {}
void loop() {}
Zilliput
quelle
2
Darüber hinaus ist es im Allgemeinen eine schlechte Praxis, Bibliotheken in Header-Funktionen aufzunehmen, die dem Benutzer zur Verfügung stehen, da dies häufig zu seltsamen Fehlern mit mehreren Definitionen / etc. Führen kann.
Anonymer Pinguin

Antworten:

4

Die Arduino-IDE wird hier nicht zu formal und untersucht, welche Bibliotheken in der Skizze der obersten Ebene enthalten sind, wenn entschieden wird, welche Bibliotheken in die Kompilierung aufgenommen werden sollen.

Es wäre sinnvoll, nur RTClib.h Wire.h einzuschließen. Ja, aber die IDE erhält nicht die Informationen, um Wire auf diese Weise zur Kompilierungsliste hinzuzufügen. Es ist eine Eigenart der IDE, die die Implementierung von Bibliotheken, die andere Bibliotheken verwenden, etwas schmerzhafter macht.

BrettAM
quelle