我看到了一个GLUT演示的顶部代码,并对其功能感到好奇。
为什么有人想要编写#pragma而不是只包含库呢?
#ifdef
预处理器测试来决定。#pragma
在分发库时非常有用。特别是当您有不同的已编译 .libs 用于不同的构建设置(例如,调试与发布、多线程 C 运行时与单线程、DLL 与静态库等)时。您可以在代码中使用 #ifdef
选择正确的 .lib 文件,而不是要求用户设置其构建环境以选择正确的文件。
它可以降低支持时间,因为您的用户无法选择错误的 .lib 文件。
这是一个MSVC特定的编译指示符,意味着命名库将在链接时自动包含。你关于“仅包含库”的问题暗示了你没有理解头文件和库之间的区别:头文件(GL/glut.h
)描述了编译器可以在链接时期望的函数。库(lib/glut32.lib
)提供了这些函数的实现。
正如其他答案所解释的那样,使用这个功能可能很方便,但我个人认为这是一个糟糕的想法,因为它增加了编写可移植代码的另一个障碍(其他平台和编译器可能不支持它)。这个问题(感谢@martin clayton)解释了为什么对于可移植代码来说这不是一个好主意。