【发布时间】:2018-01-19 22:04:43
【问题描述】:
如果我有SOME_MACRO 定义为__declspec(dllimport) 或__declspec(dllexport),有没有办法在编译时检查正在使用哪个?
即像这样:
#if SOME_MACRO == __declspec(dllimport)
// do something
#else
// do something else
#endif
UPD。 看看我得到的答案,我想我应该更具体地说明我为什么需要这个。
我正在尝试编译一个相当大的第 3 方库,该库在包含它的大部分代码中都有一个声明为 dllexport 的函数。然而,有一个组件是dllimport。
我需要稍微修改 dllimport 案例的声明。两个声明之间的切换不是很简单,它是一个相当深的#ifdef 指令树分布在多个文件中的结果。原则上我可以从这些说明中挖掘出这些信息,但为了确保我做得正确,我必须尝试在几种不同的配置下编译整个库(每次编译需要几个小时)。
另一方面,如果有一种简单的方法可以检查他们的 SOME_MACRO 是否被评估为导入或导出,我可以在一个小程序上进行测试,快速安全地将其放入库中。
【问题讨论】:
-
__declspec不是宏,它是 Visual C++(和兼容的)编译器中的特殊关键字。 -
使用确定 SOME_MACRO 值的相同逻辑?
-
@Someprogrammerdude 感谢您的评论,很抱歉混淆了条款。不过,我想我想要检查的内容应该很清楚。
-
@AnonMail 原则上,这是一个选项。但是这个逻辑是由其他人实现的,有点复杂,所以我希望有一种简单的方法可以在编译时检查它。
标签: c++ c-preprocessor