至少有一些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定义的行为在什么时候发生?