Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

#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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...