包含宏的预处理器消息
Preprocessor message containing macro
如何在预处理过程中打印包含宏的消息?
例如:
#define MACRO_1 1
#pragma message ("Date:" __DATE__) // OK
#pragma message ("MACRO_1 = " MACRO_1) // error: pragma message requires parenthesized string
你应该做的是在扩展后将预处理器字符串化MACRO_1。您不能将#MACRO_1 插入#pragma message() 中,因为禁止插入。在这种情况下,预处理器在#pragma message() 中看到的是“#MACRO_1”而不是“1”。但是,当您使用 SSTRINGIZE(x) (如下例所示)时,您是在指示预处理器扩展 MACRO_1 (获取其值,在您的情况下为 1 )然后将其字符串化(将其转换为字符串) .最后,您将在最后的#pragma message() 中获得字符串“1”。
请尝试此代码,它应该会打印出您打算执行的操作。
#define MACRO_1 1
#pragma message ("Date:" __DATE__)
#define STRINGIZE(x) "MACRO_1 = " #x
#define SSTRINGIZE(x) STRINGIZE(x)
#pragma message (SSTRINGIZE(MACRO_1))
如何在预处理过程中打印包含宏的消息?
例如:
#define MACRO_1 1
#pragma message ("Date:" __DATE__) // OK
#pragma message ("MACRO_1 = " MACRO_1) // error: pragma message requires parenthesized string
你应该做的是在扩展后将预处理器字符串化MACRO_1。您不能将#MACRO_1 插入#pragma message() 中,因为禁止插入。在这种情况下,预处理器在#pragma message() 中看到的是“#MACRO_1”而不是“1”。但是,当您使用 SSTRINGIZE(x) (如下例所示)时,您是在指示预处理器扩展 MACRO_1 (获取其值,在您的情况下为 1 )然后将其字符串化(将其转换为字符串) .最后,您将在最后的#pragma message() 中获得字符串“1”。
请尝试此代码,它应该会打印出您打算执行的操作。
#define MACRO_1 1
#pragma message ("Date:" __DATE__)
#define STRINGIZE(x) "MACRO_1 = " #x
#define SSTRINGIZE(x) STRINGIZE(x)
#pragma message (SSTRINGIZE(MACRO_1))