0

我在整个代码中都使用它:

#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++ 宏字符串连接并尝试使用它,但我无法让它工作。我认为这必须这样做,消息需要像这样在转义引号中(这个工作我只是不知道如何创建一个像这样与_Pragma一起工作的转义字符串):

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

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

解决方案应该是单行的,将每个 pragma 消息都包含在其中#ifdef SHOW_DEVELOPER_MESSAGES会违背本练习的目的。


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

DEVELOPER_FIXME("bug")

它总是在字符串前面加上 FIXME 以形成:"FIXME: bug"

4

1 回答 1

6

(在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)
于 2013-08-15T12:47:20.463 回答