korea1 Geschrieben 9. Juli 2003 Geschrieben 9. Juli 2003 hi, hab da mal ne frage, wozu sind präprozessoranweisungen wie z.b. #define, #elif, #ifdef, #endif usw gut? ich weiss, dass die bei z.b. #include <iostream.h> der quelltext von der header datei eingesetzt wird. aber für was benötige ich das andere zeug und was kann ich damit bewirken?:confused: danke korea1 Zitieren
Klotzkopp Geschrieben 9. Juli 2003 Geschrieben 9. Juli 2003 #define bewirkt ähnlich wie #include eine Textersetzung, allerdings nicht an der Stelle, an der die Präprozessordirektive selbst steht, sondern an jeder Stelle im folgenden Code, an der das definierte Symbol gefunden wird. Beispiel #define COMPILETIMECONSTANT 25 // ... viel später if( q == COMPILETIMECONSTANT ) { Hier wird, bevor der Compiler den Quellcode überhaupt zu Gesicht bekommt, der Text COMPILETIMECONSTANT durch 25 ersetzt. Man kann bei #defines auch noch Parameter angeben, das sieht dann aus wie das Makro hier. Die Direktiven #if #elif #else #endif bieten die Möglichkeit der bedingten Kompilierung. Der Ausdruck nach #if wird geprüft, und falls er logisch wahr (also von Null verschieden) ist, wird der nachfolgende Codeblock in die Kompilierung einbezogen, ansonsten nicht. Mit #elif kann man eine weitere Bedingung prüfen, mit #else die "restlichen" Fälle abdecken. #endif schließt einen solchen bedingten Kompilierungsblock ab. #ifdef SYMBOL ist eine Kurzschreibweise für #if defined SYMBOL, und ist wahr, wenn irgendwo vorher im Code ein #define SYMBOL stand. #ifndef SYMBOL ist kurz für if !defined SYMBOL, hier ist es genau andersrum. Eine häufige Anwendung für diese Direktiven sind die sogenannten #include-Guards. Es kann kommt schon mal vor, dass Headerdateien andere Headerdateien per #include einbinden müssen. Um nun zu verhindern, dass derselbe Header-code mehrfach eingebunden wird (was bei gegenseitigen #includes zu Endlosschleifen führen kann), verwendet man für jede Headerdatei ein eindeutiges Symbol. Falls dieses Symbol am Anfang der Headerdatei noch nicht definiert ist, wird es definiert, und der Code der Datei normal behandelt. Falls es bereits definiert ist, wird der gesamte Code bis zum abschließenden #endif ignoriert: #ifndef MY_HEADER_FILE_INCLUDED #define MY_HEADER_FILE_INCLUDED // ... viele Deklarationen #endif Die durchgängige Großschreibung der definierten Symbole ist nicht zwingend, sondern nur üblich, um sie besser erkennen zu können. Man darf übrigens keine Symbole selbst definieren, die mit einem Unterstrich beginnen oder zwei Unterstriche hintereinander enthalten. Solche Namen sind für die interne Nutzung durch den Compiler reserviert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.