有条件的#pragma消息“ xxx”的自定义预处理器宏

Lea*_*s2D 0 xcode preprocessor pragma

我在整个代码中都使用了此代码:

#pragma message "FIXME: this needs to be fixed"
Run Code Online (Sandbox Code Playgroud)

我希望这些警告消息仅对启用它们的用户显示。我以为我会为此写一个宏,例如:

#ifdef SHOW_DEVELOPER_MESSAGES
#define DEVELOPER_MESSAGE(msg) _Pragma("message " ## msg)
#endif
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

DEVELOPER_MESSAGE("TEST: -- xxxx --")
Run Code Online (Sandbox Code Playgroud)

但这导致以下错误:

Pasting formed '"message ""TEST: -- xxxxx --"', an invalid preprocessing token
Run Code Online (Sandbox Code Playgroud)

我已经阅读了C / C ++宏字符串连接并尝试使用它,但是我无法使其正常工作。我在想这样做必须使消息必须像这样用转义的引号引起来(这种工作方式我只是不知道如何创建像这样的转义的字符串来与_Pragma一起使用):

_Pragma("message \"THIS is the actual message!\"")
Run Code Online (Sandbox Code Playgroud)

如何创建打印出编译指示消息的宏(或类似的解决方案)?

解决方案应该是单线的,将每一个实用信息#ifdef SHOW_DEVELOPER_MESSAGES都包含在内,这将违背此练习的目的。


奖励问题:如何更改宏以为不同的消息类型创建不同的变体,例如:

DEVELOPER_FIXME("bug")
Run Code Online (Sandbox Code Playgroud)

它总是与FIXME前缀字符串到形式:"FIXME: bug"

Mar*_*n R 5

(在http://gcc.gnu.org/ml/gcc-help/2010-10/msg00194.html的帮助下):

#ifdef SHOW_DEVELOPER_MESSAGES
#define PRAGMA_MESSAGE(x) _Pragma(#x)
#define DEVELOPER_MESSAGE(msg) PRAGMA_MESSAGE(message msg)
#endif
Run Code Online (Sandbox Code Playgroud)

奖金问题的答案:

#define DEVELOPER_FIXME(msg) PRAGMA_MESSAGE(message "FIXME:" msg)
Run Code Online (Sandbox Code Playgroud)