Hallo,
ich kann lesen wie ich will, ich raffe es einfach nicht. Warum benötigt #define keine Datentyp Deklaration? #define ist eigentlich nur ein Label. Wenn ich aber etwas in meiner switch case Anweisung abfrage, dann ist doch der Vergleichswert eine unsigned long Variable. Ich hätte ein Compilerfehler in Form von Datatyp Mismatch erwartet oder sowas. Es kommt aber keine Fehler, es funktioniert einfach. Genau das verstehe ich nicht.
Du bringst das etwas durcheinender. #define ist kein Label und definiert kein Label, ist auch keine Variable (Speicher wo ein Wert hineingeschrieben wird).
#define aaaa bbbb
bedeutet
ersetze "aaaa" mit "bbbb"
und zwar als erstes vor dem kompilieren oder sonstwas was der Kompiler so macht. Ganz einfaches Text ersetzen. Da braucht es keinen Datentyp oder sonstwas.
Mit dem gerade gesagten ist es Dir vieleicht klar.
Nochwas. Vielleicht lese ich auch manchmal zu viel

Bei der Arduino Reference lese ich das der
int Wertebereich von -32,768 to 32,767 beträgt. In meinem allgemeinen C Programmier Buch Markt + Technik wäre das allerdings
short. Genauso gibts noch andere Überlappungen, wobei im Buch die Wertebereiche auch von 2 verschiedenen Datantypen abgedeckt werden. unsigned int mit unsigned long oder int mit long decken den gleichen Wertebereich ab. Ist das in C nicht eindeutig festgelegt? Kann das jeder Compilerprogrammierer selbst festlegen?
Die Größe der Datentypen (wieviel Byte dafür verwendet werden und somit die größte darstellbare zahl bzw dei genauigkeit bei Float) hängt von Datenbus des Prozessors ab. Arduino hat einen 8Bit Controller. Das ist etwas anderes als eine 32 oder 64 Bit CPU des PCs. Es gibt auch Datentypen die in bestimmten systemen gleich groß sind. Das ist einfach so. Nimm es einfach als gegeben.
Grüße Uwe