Noobfrage zum Header
-
#if !defined(__SRAMA_H__) #define __SRAMA_H__ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 ... #endif // !defined(__SRAMA_H__)ich wollte fragen was genau hier passiert und wozu das alles ist, und ob das überhaupt wichtig ist.
-
#if !defined(__SRAMA_H__) #define __SRAMA_H__1. Preprozessoranweisungen.
2. Es wird geguckt ob __SRAMA_H__ schon definiert ist... wenn nicht wird __SRAMA_H__ definiert...#if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 10001. Preprozessoranweisung.
2. Es wird geguckt ob die Version von Microsoft Visual C++ höher als 1000 ist... wenn ja, wird #pragma once unterstützt und auch eingefügt...#endif1. Preprozessoranweisung.
2. Gehört zum 1..(das mit __SRAMA_H__) ... bis dahin wird alles weggelassen wenn __SRAMA_H__ schon definiert ist...#if !defined(__SRAMA_H__) #define __SRAMA_H__ // ... #endif // !defined(__SRAMA_H__)Das ganze nennt man einen Include Guard... google mal danach...
-
Pragma Directives: http://msdn2.microsoft.com/en-us/d9x1s805.aspx
z.B.: #pragma once http://msdn2.microsoft.com/en-us/4141z1cx.aspx
-
Nur noch als Anmekrung. Durch pragma once kann der COmpiler bereits beim include Befehl die Datei komplett überspringen.
-
Jo das wundert mich auch immer... warum dieses doppelte gemoppel? Also Include Guard + pragma once... weiß jemand warum?
-
#if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000würde doch vollkommen ausreichen, oder nicht???
Wozu auch mit if die Version abfragen es, es wird doch keiner eine Version < 1000 mehr nutzen.
-
"#pragma once" ist viel schneller, da sich der Compiler intern mekrt, dass er diese Datei schon mal für die c/cpp-Datei eingebunden hat; und dies dann nicht wieder tut, wenn ein "include" kommt.
Die inlcude-guards sind eigentlich bei MS compilern nicht notwendig, aber vermutlich aus "kompatibilitätsgründen" zu anderen Compilern drin.
Die include-guards verhindern halt nicht ein "include", sondern binden die Datei eben zig-Mal in *eine* c/cpp-Datei ein, aber eben nur einmal vollständig, und bei den anderen Mal nur teilweise...
-
#pragma rulez!

Standard ist nicht immer gleich Optimum.
-
Jochen Kalmbach schrieb:
"#pragma once" eben zig-Mal in *eine* c/cpp-Datei ein, aber eben nur einmal vollständig, und bei den anderen Mal nur teilweise...
Was meinst du mit einmal Vollständig und bei den andern nur teilweise?
Er includet von einem Header nur betsimmte Teile?
-
Unix-Tom schrieb:
Jochen Kalmbach schrieb:
"#pragma once" eben zig-Mal in *eine* c/cpp-Datei ein, aber eben nur einmal vollständig, und bei den anderen Mal nur teilweise...
Was meinst du mit einmal Vollständig und bei den andern nur teilweise?Er includet von einem Header nur betsimmte Teile?
Du hast irgendwie falsch zitiert, oder?
#pragma once => Datei wird nur *einmal* gelesen
include-guards => Datei wird immer wieder gelesen und nur der Teil per ifndef nicht in den Source übernommen... gelesen wird sie aber jedesmal
-
Hast recht. Du hast das auf die include-guards bezogen.
Das habe ich überlesen.