Sam*_*rsa 4 c++ c-preprocessor
它们(预处理器定义)是否已编译为静态/动态库?例如,FBX SDK需要KFBX_DLLINFO
.使用FBX SDK的库必须包含该库.现在客户端应用程序,从我有限的实验中可以看出,不需要再次声明定义.
现在我想不出更实际的情况,但是如果客户端应用程序"需要"排除的定义(例如_CRT_SECURE_NO_WARNINGS
使用库编译,但是如果我需要这些警告怎么办?
Chr*_*ich 16
简而言之:没有.
总之:在大多数情况下,您可以将预处理器定义视为文本替换机制.它们在编译发生之前被处理(预编译),因此它们在编译器将其转换为机器代码,中间文件或其目标之前转换源代码.当你有一个二进制lib/obj/dll/exe/so文件时,预处理器定义早已不复存在.
如果在代码中包含一个标题作为库的一部分打包(例如,为了引用库定义的方法,类型,枚举等),那么您将包含库在该标头中定义的预处理器定义.
在您的情况下,如果您包含FBX标头,您可能还会拉入预处理器定义KFBX_DLLINFO
.您链接的FBX二进制库几乎肯定是使用相同的标头构建的,因此您构建的是相同的定义.这是使用C/C++编写的库的常见模式:常见的共享头文件以及要构建的静态或动态库.