Man kann das auch verwenden.
Ich verwenden ganz gerne: #define Sek *1000 #define Min *60 Sek
Im Code dann: long Dauer = 5 Min;
Vor dem Comilieren ersetzt der Compiler dann alle "Min" und "Sek", macht also aus obiger Zeile
long Dauer = 5 601000; (was dann wiederum zu long Dauer = 300000 zusammengesetzt wird)
Aber das ist eben ein reines Text ersetzen. Ohne jegliche Überprüfung. Im Beispiel kann das Sinn machen, weil es wirklich um Text geht und um die Lesbarkeit.
Wenn es wirklich um die Vereinbarung von Zahlenwerten geht, dann ist es meiner Meinung nach besser, const zu benutzen.
const int LEDpin = 6;
Dann werden damit auch sämtliche Typüberprüfungen durchgeführt, wie Combie schon geschrieben hat.
Das ist auch in der Arduino IDE so:
die Pindefinitionen wie z.B. A0, SDA etc sind per const gelöst,
Begriffe wie INPUT, true etc per #define
Genaugenommen ist #define ist ein Präprozessor-Makro. Der Präprozessor ist heute meistens Teil des Compilers, aber er war früher mal ein völlig eigenständiges Programm.
Wo man #define hauptsächlich sieht ist in den Headers von Bibliotheken. Zum Teil für Konstanten. Zum Teil für Einstellungen. Aber in Sketchen sollte man eher zu const greifen.
const hat auch in C++ noch viele andere Zwecke, die weit über #define hinausgehen. z.B. sind String Literale const. Deshalb sollte man einen Funktions-Parameter der einen C String nimmt, als "const char*" deklarieren und nicht als "char*". Genau zwingt dich der Compiler PROGMEM Konstanten als const zu deklarieren.
Eine sehr wichtige Rolle spielt const dann bei Referenzen auf Objekte. Man kann auch ganze Methoden als const deklarieren. Diese können dann keine Daten ändern und const Objekte können dann nur const Methoden aufrufen. Und Methoden-Signaturen können sich durch const unterscheiden. So kann man const und nicht const Objekte unterschiedlich behandeln.