#pragma - wozu ist das ?
-
hallo!
möchte gern wissen wozu man die direktive #pragma alles genau verwenden kann..?
ich hab mal gehört damit kann man fehlermeldungen unterdrücken...
bei der faq in der console zum thema zeichnen in der console, steht auch am anfang :
#pragma inline
.386eund vorhin hab n beitrag gelesen, das man das für threads verwenden kann...:
#pragma omp parallel sections
{
#pragma omp section { }wie is das gemeint ?
so nebenbei würd es mich eh interessieren wie ich threads erstellen kann !
weil das brauch ich nämlich für mein prog-> kann mir jemand einen etwas ausführlichen bericht zum thema #pragma liefern ?
thx
mfg haMMer
-
#pragma ist eine Anweisung, die an den Präprozessor geht.
Anschließend folgt ein Befehl. Damit kann man beim VC zum Beispiel Warnungen ausschalten oder dafür sorgen, daß eine Header-Datei nur einmal eingebunden wird. Aber diese Befehle sind alle Compilerspezifisch. Es gibt keine Verpflichtungen, daß der Compiler sie kennen muß.Deswegen das #pragma davor. Das heißt so viel wie: Wenn Du das nächste verstehst, dann mach es, sonst ignorier es einfach. Deswegen sollte man mit den pragma's auch vorsichtig sein, weil es sonst passieren kann, daß Du Code erzeugst, der nur mit einem einzigen Compiler funktioniert.
Dennoch ist es ganz praktisch, beim VC zum Beispiel einige Warnungen abzuschalten.MfG Jester
-
aha !
hmm ich hab z.b. bei mir eingestellt, dass er nur für windows 2 bestimmte funktionen compiliert...#ifdef WIN32
funktion1() {...}
funktion2() {...}#endif
könnt ich das auch mit
#pragma
funktion1() {...}
...
ersetzen ? aber da brauch ich ja dann noch ne end-anweisung wie #endif ... ?
-
nein, die Anweisung nach Pragma geht ist kein Programmcode. Die geht an den Compiler, zum Beispiel so:
#pragma once
damit wird eine Header-datei nur einmal eingebunden (beim VC) andere Compiler verstehen das once nicht und ignorieren es, weil ja #pragma davorsteht. Dann kanns halt zu Fehlern kommen.
#pragma disable warnin(blabla)
weiß nicht genau wie die Syntax geht. Heißt, der Compiler soll bestimmte Warnungen abschalten.
Auf den Code hat das keinen Einfluß´.
-
aus MSDN:
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
Diese Funktionalität entspricht:
#pragma warning( disable : 4507 34 ) // Warnungsmeldungen // 4507 und 34 deaktivieren #pragma warning( once : 4385 ) // Warnung 4385 nur // einmal ausgeben #pragma warning( error : 164 ) // Warnung 164 // als Fehler melden.
auch:
#if _M_IX86 == 500 #pragma message( "Erstellung für Pentium-Prozessor" ) #endif
oder
#pragma message( "Kompilieren von " __FILE__ ) #pragma message( "Zuletzt geändert am " __TIMESTAMP__ )
[ Dieser Beitrag wurde am 17.02.2003 um 01:00 Uhr von Erhard Henkes editiert. ]
-
cool...
lol thx !jetzt wo die alle sich so mühe gegeben haben, könnt ev. der admin das ja ins FAQ stecken...
ich glaube nicht, dass alle wissen für was pragma steht...mfg haMMer
[ Dieser Beitrag wurde am 17.02.2003 um 01:48 Uhr von Hammer editiert. ]
-
pragmas kann man aber auch für den linker verwenden:
#pragma comment(lib,"winmm.lib")
zb veranlasst den linker, die datei "winmm.lib" zu binden - ganz praktisch, wenn man keine lust hat, ständig die project-settings umzubiegen
rocknix ///
-
libs ! lol!
geht das nur unter MSVC++ ??
weil ich vergiss es nämlich häufig selber die libs einzubinden...
-
hmm, also ich kann dir aus erfahrung bestätigen, dass es sowohl mit dem MS Compiler/Linker als auch mit dem Borland funktoniert.
es gibt da zwar einige compilerspezifische anweisungen, aber die hier genannten laufen afaik unter beiden.
wie es mit anderen tools aussieht, weiss ich nicht. wäre aber interessant zu wissen - also wenn da jemand was weiss ...
rocknix ///