c++ - Win32 逻辑 block 预处理器显示不活动

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

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

相关文章:

c++ - 运行时错误 - 除以零

java - 我正在尝试检查某些文件是否存在。为什么我的程序不允许用户输入文件?

c - C 中的基本循环 - 如何求因子之和

c++ - 上下文共享在带有 glfw 和 glew 的 opengl 中不起作用,第二个窗口就像上下文根本不共享

c++ - boost 图相等性和子图

c# - 如何使用 C# 获取 Windows 资源管理器中当前打开的所有文件夹的完整路径?

c++ - Win32,等待主消息队列中的线程?

c++ - libcurl 首选构建方法

logic - 合金约束规范

c++ - 如何用c++改变OMNet++中模块的显示图标?