包含宏的预处理器消息

时间:2015-01-13 18:18:29

标签: c printing macros c-preprocessor pragma

如何在预处理期间打印包含宏的消息?

E.g:

#define MACRO_1  1
#pragma message ("Date:" __DATE__)           // OK
#pragma message ("MACRO_1 = " MACRO_1)       // error: pragma message requires parenthesized string

1 个答案:

答案 0 :(得分:3)

您应该做的是在展开后对预处理器MACRO_1进行字符串化。您不能将#MACRO_1插入到#pragma message()中,因为禁止使用strays。在这种情况下,预处理器在#pragma message()中看到的是"#MACRO_1"而不是" 1"。但是,当您使用SSTRINGIZE(x)时(如下面的示例所示),您指示预处理器扩展MACRO_1(在您的情况下获取其值为1)然后将其字符串化(将其转换为字符串)。最后,您将获得字符串" 1"最后在#pragma message()里面。

请尝试使用此代码,它应该打印您打算执行的操作。

#define MACRO_1  1
#pragma message ("Date:" __DATE__)           
#define STRINGIZE(x) "MACRO_1 = " #x
#define SSTRINGIZE(x) STRINGIZE(x)
#pragma message (SSTRINGIZE(MACRO_1))