“ #pragma评论”是什么意思?


Answers:


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)?
罗伊

4

我一直称它们为“编译器指令”。它们指示编译器在编译阶段执行操作,分支(包括上述库),禁用特定错误等。

编译器公司通常会创建自己的扩展程序以促进其功能。例如,(我相信)微软启动了“ #pragma一次”交易,而且仅在MS产品中使用,现在我不太确定。

语法指令在您将看到的表中包含“ #pragma注释”。

高温超导

例如,我怀疑GCC拥有自己的#pragma。


6
您误解了这个问题。他不是在问什么是实用语,而是将它们称为注释而不是指令。他特别在问什么#pragma comment意思。
罗伯·肯尼迪

2
在这里很尴尬,它实际上是链接器的指令。
汉斯·帕桑

@Hans:嗯,所以在这种情况下,我们将其称为“链接器指令”吗?
JustBoo 2010年

1
不,它仍然是编译器指令。它告诉编译器给链接器包括该库的注释。
HerrJoebob


0

Pragma指令指定操作系统或计算机特定的(x86或x64等)编译器选项。有几个选项。可以在https://msdn.microsoft.com/zh-cn/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被链接器搜索并包含在最终可执行文件中。


0

MSDN提供的答案和文档是最好的,但是我想补充一个典型的案例,我经常使用它,例如,需要#pragma comment在链接时使用来向链接器发送命令

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

告诉链接入口点形式转变WinMain()Entry()以后的CRTStartup打算控制研究转移到Entry()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.