至少某些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定义?