was ist #ifdef #endif #elsif

moin Community,

ich bin neu in dern Arduino Welt und hätte mal ne frage. ich sehe an beispielprogrammen ganz oft am anfang #ifdef und #endif. was machen die und warum stehen die am Anfang. (If und else kenn ich)

Arduino wird in C++ programmiert.

- sind Präprozessor - Anweisungen

michael_x:

- sind Präprozessor - Anweisungen

Also Präprozessoren sind Anweisungen die nicht direkt zum Programmcode gehören Ihn aber vor dem Compilieren verändern beispielsweise eine Bibliothek hinzufügen um bestimmte befehle zu benutzen?
und was genau macht Ifdef ? wie verändert das den code ?

Tesla012:
ich bin neu in dern Arduino Welt und hätte mal ne frage. ich sehe an beispielprogrammen ganz oft am anfang #ifdef und #endif. was machen die und warum stehen die am Anfang. (If und else kenn ich)

Befehle mit # am Anfang sind Befehle für das Ding, das den Code vor dem eigentlichen Übersetzungsvorgang bearbeitet. Man kann z. B. Codeteile aus- oder einblenden - je nachdem, ob bestimmte Voraussetzungen gegeben sind. Man kann z. B. Befehle nur dann einblenden, wenn man prüfen möchte, ob das Programm wunschgemäß läuft. Dann definiert man z. B.

#define DEBUG

und kann später etwas wie

#ifdef DEBUG
  Serial.print(...);
#endif

schreiben. Der Serial.print()-Befehl wird dann nur in den Code eingefügt, wenn DEBUG definiert wurde. Wenn man das erste #define auskommentiert, wird auch die entsprechende Ausgabe nicht in den Code eingebaut.

Gruß

Gregor

1 Like

#define BLAH erzeugt eine Konstante die dem Compiler bekannt ist. #ifdef (if defined) fragt dann ab ob diese Konstante definiert ist.

Das kann z.B. der Name des Prozessors sein. In der Arduino IDE wird das oft verwendet um für verschiedene Prozessoren unterschiedliche Dinge zu tun. z.B. eine andere Bibliothek einbinden. Oder andere Register verwenden, da die Hardware der Prozessoren oft etwa unterschiedlich ist. Für den Anwendung verhalten sie sich dann gleich obwohl sie intern anders arbeiten

Eine andere Anwendung sind Include Guards um Mehrfachs-Inkludierungen zu verhindern:

Das findet man in jedem Header