簡體   English   中英

“#pragma comment”是什么意思?

[英]What does “#pragma comment” mean?

#pragma comment在以下內容中意味着什么?

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

#pragma comment是一個編譯器指令,它指示Visual C ++在生成的目標文件中留下注釋。 然后,鏈接器在處理目標文件時可以讀取注釋。

#pragma comment(lib, libname)告訴鏈接器將“libname”庫添加到庫依賴項列表中,就好像您已在Linker->Input->Additional dependencies的項目屬性中添加它一樣。

請參閱MSDN上的#pragma評論

我一直稱它們為“編譯器指令”。 它們指導編譯器在編譯階段執行分支操作,包括如上所示的lib,禁用特定錯誤等。

編譯器公司通常會創建自己的擴展來促進其功能。 例如,(我相信)微軟開始了“#pragma once”交易,它只在MS產品中,現在我不太確定。

Pragma指令它包含您將看到的表中的“#pragma comment”。

HTH

我懷疑GCC有自己的#pragma's。

這些鏈接在MSVC ++中選擇的庫中。

Pragma指令指定操作系統或特定於機器(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.libuser32.lib ,並將其包含在最終的可執行文件中。

MSDN提供的答案和文檔是最好的,但我想添加一個我使用很多的典型案例,需要使用#pragma comment在鏈接時向鏈接器發送命令,例如

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

告訴鏈接器將入口點從WinMain()更改為Entry()之后, CRTStartup將控制轉移到Entry()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM