Der Ausdruck #define ist ein Befehl für den C-Präprozessor. Mit ihm können Zeichenfolgen in einem Quellcode definiert werden, die im Präprozessor ausgewertet werden.
Definieren von Alias-Namen
Mit #define kann man eine Zeichenfolge als Alias für eine andere Zeichenfolge, wie zum Beispiel einen Wert definieren, z.B:
#define MAXIMALWERT 100
Nun wird an jeder Stelle im Code, an der die Zeichenfolge MAXIMALWERT auftaucht, diese durch den Wert 100 ersetzt. Dadurch wird Code leichter lesbar, da anstelle einer Zahl ein sprechender Name steht.
Im Gegensatz zur Definition als Konstante wird hierbei allerdings keine Typprüfung des Variablentyps durchgeführt. Daher ist die Verwendung des Schlüsselwortes const in der Regel die bessere Variante. Für die Programmierung von Mikrocontrollern kann die Verwendung von #define allerdings trotzdem das Mittel der Wahl sein. Durch den Verzicht auf eine Konstante kann wertvoller Speicherplatz gespart werden.
Nutzung als Compiler-Schalter
Eine weitere Anwendung bestet in der Nutzung als Compilerschalter. Hierbei wird zunächst eine möglichst aussagekräftige Zeichenkette definiert, welche die gewollte Compilereinstellung ausdrückt, z.B.:
#define TARGET_CONTROLLER_xyz
was ausdrückt dass die Zielhardware Controller_xyz verwendet wird. Anschließend kann mit den Präprözessorbefehlen #ifdef und #endif ein Code-Block erstellt werden, der nur compilieret wird, wenn das entsprechende #define vorhanden ist:
#ifdef TARGET_CONTROLLER_xyz
…Beispielcode…
#endif
Durch Auskommentieren des #define können so beliebig viele Code-Bereiche von der Compilierung ausgenommen werden und es wird nur der Quellcode compiliert, der wirklich für das Zielsystem benötigt wird.
Alternativ kann mit #ifndef statt #ifdef auch eine Negation erfolgen. Der Codeblock wird dann durchgefüht, wenn das #define nicht vorhaden ist.