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

时间:2013-08-15 12:10:40

标签: xcode preprocessor pragma

我在整个代码中使用它:

#pragma message "FIXME: this needs to be fixed"

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

#ifdef SHOW_DEVELOPER_MESSAGES
#define DEVELOPER_MESSAGE(msg) _Pragma("message " ## msg)
#endif

并像这样使用它:

DEVELOPER_MESSAGE("TEST: -- xxxx --")

但是这会导致以下错误:

Pasting formed '"message ""TEST: -- xxxxx --"', an invalid preprocessing token

我已阅读C/C++ Macro string concatenation并试图使用它,但我无法让它工作。我认为这必须这样做,消息需要像这样的转义引号(这个工作我只是不知道如何创建一个像_Pragma这样的转义字符串):

_Pragma("message \"THIS is the actual message!\"")

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

解决方案应该是一个单行,用#ifdef SHOW_DEVELOPER_MESSAGES封闭每个pragma消息将会破坏本练习的目的。


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

DEVELOPER_FIXME("bug")

始终将字符串前缀为FIXME,形成:"FIXME: bug"

1 个答案:

答案 0 :(得分:4)

(在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

回答奖金问题:

#define DEVELOPER_FIXME(msg) PRAGMA_MESSAGE(message "FIXME:" msg)