#pragma once VS #ifndef....define...endif



  • a)

    #pragma once
    

    b)

    #ifndef _HEADER_H_
    define _HEADER_H_
    endif
    

    was ist da unterschied (vorteile und nachteile) zwischen diesen beiden möglichkeiten zum "einmaligem includen" von header dateien ?



  • soviel ich weiß wird pragma once
    nur von MS Compiler (und dann erst ab einer bestimmten version) unterstützt.

    wenn man es mit einem anderen compiler machen will, dann ignoriert er es,
    aber wird halt dann alles doppelt eingebunden.

    #ifndef ist compiler übergreifend und sollte vorgezogen werden.



  • b) ist falsch. a) genauso. (im Bezug auf den Standard)

    Begründung:
    Zu a): #pragma ist absolut plattformabhängig. Wenn das der einzige Schutz ist, reicht das nicht aus.
    Zu b): Globale Bezeichner dürfen nicht mit einem Unterstrich beginnen. Es muss also HEADER_H und nicht _HEADER_H_ heißen.



  • #pragma once ist ein Visual C++ Feature, von anderen Compilern wird diese Direktive gar nicht unestützt. Die zweite Variante funktioniert mit jedem Compiler.

    [edit] zu spät 🙄 [/edit]


Anmelden zum Antworten