c - 包含宏的预处理器消息

标签 c printing macros c-preprocessor pragma

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

例如:

#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))

关于c - 包含宏的预处理器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27928830/

相关文章:

Android NDK 不支持头文件?

c - 尝试根据另一个数组中的正数创建一个数组

c - 如何使用c中定义的double打印 'space character'?

c - pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

clojure - Clojure 中 ~' or ' ~ 的目的是什么?

c++ - Visual Studio 宏 - 入门 |将定义从 .cpp 复制到 .h

javascript - 谷歌浏览器打印预览第一次不加载页面

python - python中多线程打印函数的意外缩进输出

javascript - 如何使用 JS 打印 HTML 部分?

c - C 预处理器的对面 "stringification"