我在整个代码中使用它:
#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"
。
答案 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)