【问题标题】:Preprocessor message containing macro包含宏的预处理器消息
【发布时间】:2023-03-03 15:10:01
【问题描述】:

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

例如:

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

【问题讨论】:

  • 我猜 MACRO_1 的结果只需要一个字符串 ("1") 就可以了。您可以使用#pragma message ("MACRO_1 = " #MACRO_1) 在代码中对其进行字符串化。见gcc.gnu.org/onlinedocs/cpp/Stringification.html
  • @IdeaHat - 我尝试使用“1”字符串来使用单个 #,但我不断收到相同的错误...

标签: c printing macros c-preprocessor pragma


【解决方案1】:

你应该做的是在扩展后对预处理器 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))

【讨论】:

  • 这是我从你的代码中得到的:warning: MACRO_1 = MACRO_1 [-W#pragma-messages]
  • 我查看了代码,现在显示的应该可以工作。希望这会有所帮助:)
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
相关资源
最近更新 更多