小编coo*_*oop的帖子

C++ - 如何在宏内使用预处理器 if 语句(#if、#elif、#endif)?

我目前正在开发一个我打算移植的程序。我可以访问 Windows 和 macOS,并且我希望能够在两者上轻松调试。当错误处理时,我希望在那里有调试中断以使其变得容易(__debugbreak()对于 MSVC)。由于我打算在多个平台上进行开发和测试,因此我想制作一个宏来执行以下操作:

#define DEBUG_BREAK #ifdef DEBUG\
    #if _MSC_VER                \
        __debugbreak();         \
    #elif __GNUC__              \
        __builtin_trap();       \
    #endif                      \
#endif
Run Code Online (Sandbox Code Playgroud)

DEBUG_BREAK因此,在任何平台上调试时,我可以在任何想要破坏代码的地方编写代码。当我使用这个宏时,我收到错误'#' not expected here

我发现两个有些相关的问题:

  1. 如何在 C 预处理器中的#define 中使用#if?
  2. C 预处理器 #if 表达式

但他们都没有回答我的问题,因为他们试图完成不同的事情。

所以我的问题是:如果允许的话,如何在宏内部使用预处理器 if 语句?如果不可能,我该怎么做才能获得这个损坏的DEBUG_BREAK宏试图执行的相同功能?

注:DEBUG编译时定义,用于调试;编译发布时未定义它。

c++ macros visual-c++ preprocessor-directive

0
推荐指数
1
解决办法
135
查看次数

标签 统计

c++ ×1

macros ×1

preprocessor-directive ×1

visual-c++ ×1