我尝试通过在预处理器指令上修改其宏来以不同的方式在 visual studio 上使用库。但是,#if
指令中的逻辑 block 向我显示为非事件状态,因为它是注释。这是代码:
#if defined EBML_DLL
#if defined EBML_DLL_EXPORT
#define EBML_DLL_API __declspec(dllexport)
#else // EBML_DLL_EXPORT
#define EBML_DLL_API __declspec(dllimport)
#endif // EBML_DLL_EXPORT
#else // EBML_DLL
#define EBML_DLL_API
#endif // EBML_DLL
问题在于,如果 ebml_dll block 处于非事件状态(如评论),visual studio 会显示其中的代码。导致该dll在VS的对象浏览器中不显示函数。
提示:如果在 #if
定义的 EBML_DLL 行的末尾添加反斜杠,它只会激活 else block 。
最佳答案
在旧版本的 VS 中有一个关于这个的错误,但它只是一个显示问题。 VS 没有正确读取定义(在您的情况下是 EBML_DLL 等)。
也可能是您在预处理器语句中使用的常量不正确并且缺少字符(通常编译器使用的字符在开头和结尾有下划线)
要真正确定它是哪一个,您可以在预处理器预期采用的分支内添加一个随机字符串,然后查看代码是否编译。
#if defined EBML_DLL
this_should_not_compile //you should get an error on this line
#endif
希望这有助于...
关于c++ - Win32 逻辑 block 预处理器显示不活动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810355/