我在GLUT演示的顶部看到了代码,我很好奇它的功能。
为什么有人想要编写#pragma而不是只包含库?
答案 0 :(得分:3)
此编译指示允许库作者根据可在编译时分析的一系列条件定义库导入。例如,您可以根据是否要链接来链接不同的库:
使用pragma表单,所有这些都可以通过其中一个库头文件中的#ifdef
预处理器测试来决定。
答案 1 :(得分:1)
如果您要分发库,#pragma
非常有用。特别是如果你有不同的编译.libs用于不同的构建设置(例如调试与发布,多线程C运行时与单线程,DLL与静态库等)。您可以在代码中使用#ifdef
来选择正确的.lib文件,而不是要求用户设置其构建环境以选择正确的。{/ p>
它减少了支持时间,因为您的用户无法选择错误的.lib文件。
答案 2 :(得分:1)
这是一个MSVC-specific pragma,这意味着命名库将在链接时自动包含在内。关于“仅包含库”的其余问题表明您并不理解标头和库之间的区别:标头(GL/glut.h
)描述了编译器在链接时可以期待的功能。库(lib/glut32.lib
)提供了这些函数的实现。
正如其他答案所解释的那样,它可以很方便,但我个人认为使用它是一个可怕的想法,因为它为编写可移植代码增加了另一个障碍(其他平台和编译器可能不支持它)。 This question(感谢@martin clayton)解释了为什么对于便携式代码不是一个好主意。