最佳答案
至少有一些 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 定义?