12.4 Vordefinierte Präprozessor-Direktiven (ANSI C)
 
Folgende vordefinierten Makros werden von ANSI C vorgeschrieben:
Tabelle 12.5
Vordefinierte Standard-Makros
Makroname
|
Bedeutung
|
LINE__
|
Zeilennummer der aktuellen Zeile in der Programmdatei
|
FILE__
|
Name der Programmdatei
|
DATE__
|
Übersetzungsdatum der Programmdatei
|
TIME__
|
Übersetzungszeit der Programmdatei
|
STDC__
|
Erkennungsmerkmal eines ANSI C-Compilers. Ist die ganzzahlige Konstante auf den Wert 1 gesetzt, handelt es sich um einen ANSI C-konformen Compiler.
|
cplusplus
|
C++-Code
|
Hier folgt ein Beispiel zur Verwendung dieser vordefinierten Makros:
/* direktiven.c */
#include <stdio.h>
#include <stdlib.h>
#if defined __STDC__
#define isstd_c() printf("ANSI C Compiler\n")
#else
#define isstd_c() printf("Kein ANSI C Compiler\n")
#endif
int main(void) {
printf("Zeile %d in Datei %s\n",__LINE__,__FILE__);
printf("Übersetzt am %s um %s\n",__DATE__,__TIME__);
#line 999 "asdf.c"
printf("Zeile %d in Datei %s\n",__LINE__,__FILE__);
isstd_c(); /* Ist es ein ANSI C Compiler ? */
return EXIT_SUCCESS;
}
Im Programm wurde gleich eine weitere neue Präprozessor-Direktive eingesetzt:
#line Zeilennummer dateinamen.c
Damit wird bewirkt, dass die nächste Zeile der Datei dateiname.c mit der Zeile Zeilennummer (also 999) beginnt. Diese Präprozessor-Direktive beeinflusst das Programm selbst nicht, sondern nur die Nummerierung der einzelnen Zeilen. Sie wird verwendet, um einem Programm Zeilennummern für Querverweise oder Fehlermeldungen zu übergeben. Diese Direktive wird vorwiegend von Programmen wie lex oder yacc verwendet, welche C-Quelltexte erzeugen.
Außer den vordefinierten Makros, wie __LINE__, __FILE__, __DATE__, __TIME__ und __STDC__, sind im C99-Standard weitere drei Makros hinzugekommen.
Tabelle 12.6
Neue vordefinierte Standardmakros
Makro
|
Bedeutung
|
__func__
|
Gibt den Namen der Funktion aus, in der dieses Makro verwendet wird.
|
__STD_HOSTED__
|
Wenn es sich um eine Hosted-Implementierung der Standardbibliothek handelt, ist diese Konstante 1, ansonsten 0.
|
__STD_VERSION__
|
Wenn der ANSI C99 Standard unterstützt wird, ist diese Konstante 199901L (1999 Januar).
|
|