Ich fange gerade an, C zu lernen, also ist dies hoffentlich keine dumme Frage. Das Problem, das ich habe, betrifft Header-Dateien und #define für Konstanten verwenden. Ich habe gelesen, dass ich das Folgende verwenden sollte, um zu verhindern, dass mein Header mehr als einmal kompiliert wird.Verwendung in einer c-Header-Datei definieren
#ifndef NAME_OF_FILE
#define NAME_OF_FILE
.
. //my header file content
.
#endif
Ich möchte eine Konstante hinzuzufügen, und ich glaube, ich auch eine #define wie
#ifndef NAME_OF_FILE
#define NAME_OF_FILE
#define NUM_CONST 5 //the constant I want in my header file
.
.
.
#endif
Wie kennt C# define, dass NAME_OF_FILE bezieht sich auf die H-Datei während verwenden würde #define NUM_CONST 5 ist nur eine Konstante? Liegt es am Wert von NUM_CONST? Oder habe ich das alles komplett falsch?
Der Compiler weiß _not_ nicht, dass 'NAME_OF_FILE' speziell ist. Es ist nur speziell von _convention_. Es ist die "Sperre" für die Datei (dh die Datei könnte mehrfach eingeschlossen sein, aber die Sperre verhindert, dass der Inhalt zwischen dem Sperrkonstrukt und dem entsprechenden "# endif" vom Compiler mehr als einmal gelesen wird . Es ist der C-Präprozessor, der dies tatsächlich tut. Wenn Sie der Logik Schritt für Schritt folgen, ist das "# ifndef" das erste Mal wahr, also ist die [1st] '# define' und der Rest enthalten. Bei dem zweiten Versuch ist das '# ifndef' falsch und springt zu dem' # endif' am unteren Ende. –