Der C-Präprozessor ersetzt in einer ersten Runde:
1 | char version[20] = VERSION_STRING;
|
durch
1 | char version[20] = TYPE "." VARIATION "." MAJOR_VERSION "." MINOR_VERSION "." SUB_REVISION;
|
und in einer zweiten durch
1 | char version[20] = "ABC" "." "_2" "." "00" "." "900" "." "00";
|
Das wird dann an den eigentlichen C-Compiler weitergegeben.
Der weiss dass zwei hintereinander stehende Strings zusammengesetzt
werden sollen. Also ist das identisch zu:
1 | char version[20] = "ABC._2.00.900.00";
|
Das versteht der Compiler nun so, dass er im Speicher 20 Bytes
reserviert und mit den Zeichen ABC._2.00.900.00 vorbelegt.
Also gehört der String zum Programmspeicher und steht dann bei der
Ausführung im Speicher. Und "version" verweist auf die Speicheradresse,
so dass z.B. version[5] eine '2' ergibt.