【发布时间】:2022-06-14 23:51:26
【问题描述】:
我想打印 typeof() 输出的类型,但 typeid 仅在 c++ 中可用。如果这是由预处理器处理的,为什么我不能使用字符串化来获取该类型的名称?
#define GET_STRING(s) #s
#define example(input) \
do { \
char test[20] = GET_STRING(typeof(input)); \
printf(test); \
} \
while (0) \
这将打印出“typeof()”,其中输入字符串化。为什么在检查 typeof() 之前预处理器要字符串化?有没有办法覆盖这种行为?
如果类型像 GET_STRING(int) 一样传递,则可以直接对类型进行字符串化,因此使用 typeof() 应该具有相同的行为。
【问题讨论】:
-
typeof由预处理器处理?怎么样? -
预处理器对类型一无所知。
-
好的,那么 gcc 在将其发送到预处理器之前对其进行处理?它必须为“typeof(x) var = y”编译。如果是这样,为什么它不字符串化?
-
为什么以前?你在做一个又一个不合理的假设。编译器在预处理后处理它。
标签: c gcc c-preprocessor c99 stringification