Allgemeine frage zu #define

Hallo,

Ich habe in einen Beispielprogramm folgende Zeile

#define errorHalt(msg) {Serial.println(F(msg)); while(1);}

weiter im Sketch steht dann

errorHalt("bad number");

die mir die Fehlermeldung ausgibt.

Wie genau funktioniert diese Definition?
Sie steht ja nicht im Loop sondern wird nur einmal definiert.
Funktioniert aber praktisch im Loop.
Ist das ein Interrupt?

Gruß Aron

#define ist eine einfache Text-Ersetzung vor dem Kompilieren. Stichwort "Makro"

Serenifly war schneller - aber doppelt genäht hält besser :slight_smile:

#define ist eine reine Textersetzung mit dem zusätzlichen Komfort, dass Du in den Klammern Parameter angeben kannst, die dann jeweils eingesetzt werden. An jeder Stelle, an der "errorHalt(irgenwas)" steht, wird stattdessen "{Serial.println(F(irgendwas)); while(1);}" in den Quellcode eingefügt.

Nicht mehr und nicht weniger.

Gruß Walter

Danke

wno158:
Serenifly war schneller - aber doppelt genäht hält besser :slight_smile:

#define ist eine reine Textersetzung mit dem zusätzlichen Komfort, dass Du in den Klammern Parameter angeben kannst, die dann jeweils eingesetzt werden. An jeder Stelle, an der "errorHalt(irgenwas)" steht, wird stattdessen "{Serial.println(F(irgendwas)); while(1);}" in den Quellcode eingefügt.

Nicht mehr und nicht weniger.

Gruß Walter

Der Preprozessor arbeitet als erstes beim Kompilieren das #define ab. Es definiert Makros die :

Ohne Parameter:
#define[leerzeichen]text1[leerzeichen]text2
Die Texte werden nur durch Leerzeichen getrennt. Es sind keine = oder ; am Ende erlaubt.

Mit Parameter wie in Deinem Fall:
#define[leerzeichen]errorHalt(msg)[leerzeichen]{Serial.println(F(msg)); while(1);}

In diesem Fall wird der Text "msg" aus dem Text1 extrahiert und in Text2 eingefügt.

Grüße Uwe