Win32 逻辑块预处理器显示不活动

Win32 logic block preprocessor shows inactive

我尝试通过修改预处理器指令上的宏以不同方式使用 visual studio 上的库。但是,#if 指令中的逻辑块向我显示为非活动状态,因为它是注释。这是代码:

  #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

问题是 visual studio 显示了 if ebml_dll 块不活动(如注释)中的代码。导致该dll在VS对象浏览器中不显示函数

提示:如果在 #if 定义的 EBML_DLL 行的末尾添加反斜杠,它只会激活 else 块。

旧版本的 VS 中存在关于此的错误,但这只是显示问题。 VS 没有正确读取定义(在你的情况下 EBML_DLL,等等)。

也可能是您在预处理器语句中使用的常量不正确并且缺少字符(通常编译器使用的字符在开头和结尾有下划线)

要真正确定它是哪一个,您可以在预处理器预期采用的分支内添加一个随机字符串,然后查看代码是否编译。

#if defined EBML_DLL
 this_should_not_compile //you should get an error on this line
#endif 

希望这对您有所帮助...