Include Guards



  • Hi!

    Ich hab nun des öfteren schon folgendes gesehen:

    #ifndef __FOOBAR_H_
    #define __FOOBAR_H_
    
    #if ( _MSC_VER > 1000 )
      #pragma once
    #endif
    
    /**
      some stuff
    */
    
    #endif
    

    Nun meine Frage: Was macht das für einen Sinn? Include Guards und #pragma once erfüllen ja den selben Zweck, außer das #pragma once nicht zwangsläufig auf jedem Compiler funktionieren muss.

    Also verwendet man das eine oder das andere, aber warum beides? Das #pragma once wird ja dank Include Guards sowiso ignoriert, bei doppeltem includieren? Oder seh ich das falsch?

    Viele Grüße



  • Hm, ok... Wer lesen kann ist klar im Vorteil:

    Specifies that the file, in which the pragma resides, will be included (opened) only once by the compiler in a build. A common use for this pragma is the following:

    😮



  • *stuff schreibt man mit 'u' (Um noch die letzten Uneinigkeiten aus dem Weg zu räumen!)



  • #pragma once ist schneller, da das File nicht 2x includiert wird. Mit include Guards passiert das allerdings, und die 2. Kopie muss vom Präprozessor "überlesen" werden, auf der Suche nach dem #endif.
    #pragma once ist aber (leider) nicht Standard.


Anmelden zum Antworten