「#pragma comment」とはどういう意味ですか?


回答:


188

#pragma comment生成されたオブジェクトファイルにコメントを残すことをVisual C ++に指示するコンパイラディレクティブです。その後、コメントは、リンカーがオブジェクトファイルを処理するときに読み取ることができます。

#pragma comment(lib, libname) 「libname」ライブラリをライブラリ依存関係のリストに追加するようにリンカーに指示します。 Linker->Input->Additional dependencies

MSDNの#pragmaコメントを参照してください


2
MSVCのみですか、それともGCC / Intelコンパイラ/ Clangに似たものがありますか?フォルダーのパスを追加するオプションはありますLinker -> General -> Additional Library Directoriesか(など)?
Royi、

4

私は常にそれらを「コンパイラ指令」と呼んでいます。これらは、コンパイル段階で、上記のようなライブラリを含む分岐、特定のエラーの無効化などを行うようコンパイラーに指示します。

コンパイラ会社は通常、独自の拡張機能を作成して、機能を容易にします。たとえば、マイクロソフトは「#pragma once」取引を開始し、それがMS製品でのみ行われたことを確信しています。

プラグマディレクティブ表示されるテーブルに「#pragmaコメント」が含まれています。

HTH

たとえば、GCCには独自の#pragmaのセットがあると思います。


6
あなたはその質問を誤解しました。彼はプラグマが何であるかを尋ねたり、ディレクティブの代わりにコメントとしてそれらを参照したりしていません。彼は具体的に何を#pragma comment意味するのか尋ねています。
ロブ・ケネディ

2
ここでぎこちない、それは実際にはリンカのためのディレクティブです。
ハンスパッサント

@ハンス:うーん、この場合、これを「リンカーディレクティブ」と呼びますか?
JustBoo 2010

1
いいえ、それはまだコンパイラ指令です。これは、リンカーにそのライブラリを含めるようにメモを残すようコンパイラーに指示しています。
HerrJoebob


0

プラグマディレクティブは、オペレーティングシステムまたはマシン固有(x86またはx64など)のコンパイラオプションを指定します。利用可能なオプションがいくつかあります。詳細はhttps://msdn.microsoft.com/en-us/library/d9x1s805.aspxにあります

#pragma comment( comment-type [,"commentstring"] ) この形式です。

さまざまなコメントタイプの詳細については、https://msdn.microsoft.com/en-us/library/7f0aews7.aspxを参照してください

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

上記のコード行には、リンカが検索する必要のあるライブラリ名(またはパス)が含まれています。これらの詳細は、ライブラリ検索レコードの一部としてオブジェクトファイルに含まれています。

したがって、この場合にkernel.lib及びuser32.lib、リンカーによって検索され、最終的な実行可能ファイルに含まれます。


0

回答とMSDNによって提供されるドキュメントが最良ですが#pragma comment、たとえばリンク時にコマンドをリンカーに送信するためにを使用する必要がある多くの典型的なケースを追加したいと思います

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

リンカにエントリポイントフォームを変更してWinMain()からEntry()CRTStartup制御を転送するように指示します。Entry()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.