Hi,
das ist ganz einfach:
Der C Präprozessor nimmt alles, was als
angegeben ist, und packt es in genau der Reihenfolge in seinem
temporären "file" über das C file, was er gerade bearbeitet, und macht
danach die Ersetzungen
Also z.b.
1 | #define UART_BAUDRATE 115200
|
2 |
|
3 | Uart_Init(UART_BAUDRATE);
|
wird
Damit man das ganze steuern kann, gibt es so was wie anfragen:
1 | #if
|
2 | #else
|
3 | #elsif
|
4 | #endif
|
5 | #ifndef
|
6 | #ifdef
|
7 | ...
|
Wenn du ein Symbol abfragst, definierst, was definitiv noch nicht da
ist, und es dann definierst, ist es in diesem kontext vorhanden.
Die präpro wird TRUE, und er macht alles, was zwischen #ifndef und
#endif steht.
1 | #ifndef __UART_H__
|
2 | #define __UART_H__
|
3 |
|
4 | #endif
|
Solltest du durch ein anderes Headerfile, was im gleichen kontext
compiliert wird, das gleiche noch mal includen, wären Symbole doppelt.
Das wird hier verhindert, da beim zweiten Lauf das Symbol (
) definiert ist.
Daher habe ich mir für die Headerfile-#ifndef (if not defined) die
Nomenklatur
ausgedacht, da das eigentlich immer unique ist.
VG,
/th.