Welchen Sinn haben diese "defines" ?



  • Guten Morgen Peoplez,
    Hab schon oft im Kopf beliebiger Headerdateien Definitionen folgender Art gesehen.

    #ifndef OSGMESHIO_H
    #define OSGMESHIO_H
    

    Diese "defs" heißen dann meist auch so wie die betroffene Klasse(In diesem Beispiel gefolgt von einem "_H").
    Wofür braucht mann diese ?

    Danke

    Blue



  • Diese #define's nennen sich im allgemeinen Sprachgebrauch "Include Guard" - und sollen verhindern, daß ein Header mehrfach in die selbe Übersetzungseinheit eingebunden wird.



  • Da gibt es doch aber auch noch dieses "#pragma once".
    Hat dessen Verwendung nicht auch den von dir beschriebenen Effekt ?

    Den oben beschriebenen Codezeilen folgen diese Zeilen:

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    

    Anscheinend ist es wohl von der Version des Compilers abhängig welche Variante man verwendet ?

    Thx



  • Blue5teel schrieb:

    Da gibt es doch aber auch noch dieses "#pragma once".
    Hat dessen Verwendung nicht auch den von dir beschriebenen Effekt ?

    #pragma once ist nicht Standard. Wird aber dennoch von den meißten Compilern richtig erkannt.

    Blue5teel schrieb:

    Den oben beschriebenen Codezeilen folgen diese Zeilen:

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    

    Kann man machen ist aber optional. Gilt nur für Microsofts Visual ...



  • Blue5teel schrieb:

    Da gibt es doch aber auch noch dieses "#pragma once".
    Hat dessen Verwendung nicht auch den von dir beschriebenen Effekt ?

    Ja, "#pragma once" bewirkt das selbe - wenn es der Compiler unterstützt (und dann ist es idR etwas schneller, weil der Compiler/Präprozessor den betroffenen Header wirklich nur einmal anfasst). Aber nicht jeder Compiler kennt es.

    (die Version #ifndef X_H/#define X_H/.../#endif schluckt dagegen wirklich JEDER standardkonforme Compiler)



  • Ok,
    danke Frau Rieger, jetz hab ich verstanden. 😃

    Danke

    Blue


Anmelden zum Antworten