“#pragma 评论”是啥意思?

Posted

技术标签:

【中文标题】“#pragma 评论”是啥意思?【英文标题】:What does "#pragma comment" mean?“#pragma 评论”是什么意思? 【发布时间】:2011-03-29 21:43:41 【问题描述】:

下面#pragma comment是什么意思?

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

【问题讨论】:

【参考方案1】:

#pragma comment 是一个编译器指令,它指示 Visual C++ 在生成的目标文件中留下注释。然后,链接器可以在处理目标文件时读取注释。

#pragma comment(lib, libname) 告诉链接器将“libname”库添加到库依赖项列表中,就好像您已在 Linker->Input->Additional dependencies 的项目属性中添加它一样

请参阅 MSDN 上的 #pragma comment

【讨论】:

是只有 MSVC 还是 GCC / Intel Compiler / Clang 有类似的东西?有没有添加文件夹路径的选项(如Linker -> General -> Additional Library Directories)?【参考方案2】:

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

编译器公司通常会创建自己的扩展来促进他们的功能。例如,(我相信)微软开始了“#pragma once”交易,它只在 MS 产品中,现在我不太确定。

Pragma Directives 它在您将看到的表格中包含“#pragma comment”。

HTH

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

【讨论】:

你误解了这个问题。他不是在问什么是 pragma,而是将它们称为 cmets 而不是指令。他特别问#pragma comment 是什么意思。 这里很尴尬,它实际上是链接器的指令。 @Hans:嗯,所以在这种情况下,我们称之为“链接器指令”? 不,它仍然是一个编译器指令。它告诉编译器为链接器留下一个注释以包含该库。【参考方案3】:

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

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

告诉链接器将入口点表单WinMain() 更改为Entry(),然后CRTStartup 将控制权转移到Entry()

【讨论】:

【参考方案4】:

这些链接在 MSVC++ 中选择的库中。

【讨论】:

【参考方案5】:

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 被链接器搜索并包含在最终的可执行文件中。

【讨论】:

以上是关于“#pragma 评论”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

基于机器学习的情感分析是啥意思

数组中的那些三点是啥?用评论标记它[重复]

网络用语套娃是啥意思 网络用语套娃的意思

在这种情况下,“固定”是啥意思?

===在php中是啥意思[重复]

activiti工作流addcomment方法是啥意思