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

时间:2015-03-02 12:56:14

标签: c++ winapi logic c-preprocessor visual-studio-2005

我尝试通过在预处理程序指令上修改其宏来以不同方式在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

问题在于,如果ebml_dll阻止处于非活动状态(如评论),visual studio会显示代码。因此,dll不会在VS的对象浏览器中显示这些功能。

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

1 个答案:

答案 0 :(得分:1)

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

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

为了确切知道它是哪一个,你可以在预处理器需要的分支内添加一个随机字符串,看看代码是否编译。

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

希望这会有所帮助......