如何在预处理期间打印包含宏的消息?
E.g:
#define MACRO_1 1
#pragma message ("Date:" __DATE__) // OK
#pragma message ("MACRO_1 = " MACRO_1) // error: pragma message requires parenthesized string
答案 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))