Was bedeutet "#pragma comment"?

169

Was #pragma commentbedeutet im Folgenden?

#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
user198729
quelle

Antworten:

188

#pragma commentist eine Compiler-Direktive, die Visual C ++ angibt, einen Kommentar in der generierten Objektdatei zu hinterlassen. Der Kommentar kann dann vom Linker gelesen werden, wenn er Objektdateien verarbeitet.

#pragma comment(lib, libname) Weist den Linker an, die Bibliothek 'libname' zur Liste der Bibliotheksabhängigkeiten hinzuzufügen, als hätten Sie sie in den Projekteigenschaften unter hinzugefügt Linker->Input->Additional dependencies

Siehe # Pragma-Kommentar zu MSDN

KeatsPeeks
quelle
2
Ist es nur MSVC oder hat GCC / Intel Compiler / Clang etwas Ähnliches? Gibt es eine Option zum Hinzufügen eines Ordnerpfads (Gefällt mir Linker -> General -> Additional Library Directories)?
Royi
4

Ich habe sie immer "Compiler-Direktiven" genannt. Sie weisen den Compiler an, während der Kompilierungsphase Dinge zu tun, zu verzweigen, einschließlich der oben gezeigten Bibliotheken, bestimmte Fehler zu deaktivieren usw.

Compiler-Unternehmen erstellen normalerweise ihre eigenen Erweiterungen, um ihre Funktionen zu vereinfachen. Zum Beispiel (glaube ich) hat Microsoft den Deal "#pragma einmal" gestartet und es war nur in MS-Produkten, jetzt bin ich mir nicht so sicher.

Pragma-Richtlinien Die Tabelle enthält "#pragma comment".

HTH

Ich vermute, dass GCC zum Beispiel einen eigenen Satz von # Pragmas hat.

JustBoo
quelle
6
Sie haben die Frage falsch verstanden. Er fragt nicht, was Pragmas sind, und bezeichnet sie als Kommentare anstelle von Anweisungen. Er fragt speziell, was das #pragma commentbedeutet.
Rob Kennedy
2
Umständlich hier ist es eigentlich eine Direktive für den Linker.
Hans Passant
@Hans: Hmm, also würden wir es in diesem Fall eine "Linker-Direktive" nennen?
JustBoo
1
Nein, es ist immer noch eine Compiler-Direktive. Es fordert den Compiler auf, eine Notiz für den Linker zu hinterlassen, um diese Bibliothek einzuschließen.
Herr Joebob
0

Diese verknüpfen die in MSVC ++ ausgewählten Bibliotheken.

Bobobobo
quelle
0

Pragma-Anweisungen geben betriebssystem- oder maschinenspezifische Compileroptionen (x86 oder x64 usw.) an. Es stehen mehrere Optionen zur Verfügung. Details finden Sie unter https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) hat dieses Format.

Weitere Informationen zu verschiedenen Kommentartypen finden Sie unter https://msdn.microsoft.com/en-us/library/7f0aews7.aspx .

#pragma comment(lib, "kernel32") #pragma comment(lib, "user32")

Die obigen Codezeilen enthalten die Bibliotheksnamen (oder den Pfad), nach denen der Linker suchen muss. Diese Details sind Teil des Bibliothekssuchdatensatzes in der Objektdatei.

Also, in diesem Fall kernel.libund user32.libwerden vom Linker gesucht und in die endgültige ausführbare Datei aufgenommen.

Shrikanth N.
quelle
0

Die Antworten und die Dokumentation von MSDN sind die besten, aber ich möchte einen typischen Fall hinzufügen, bei dem ich häufig #pragma commenteinen Befehl verwende, um beispielsweise zur Verbindungszeit einen Befehl an den Linker zu senden

#pragma comment(linker,"/ENTRY:Entry")

Weisen Sie den Linker an, das Einstiegspunktformular so zu ändern WinMain(), Entry()dass danach die CRTStartupSteuerung übertragen wirdEntry()

zerocool
quelle