至少有一些C预处理器允许您将宏的值而不是其名称字符串化,方法是将它通过一个类似函数的宏传递给另一个对其进行字符串化的宏:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
示例用例在这里。
这确实有效,至少在 GCC 和 Clang 中(都带有-std=c99
),但我不确定它在 C 标准术语中是如何工作的。
这种行为是否由 C99 保证?
如果有,C99如何保证?
如果不是,那么行为在什么时候从 C 定义变为 GCC 定义?