我试图检查给定的宏标记是否为指针(__builtin_classify_type(…)== 5),但我遇到了一个问题,该内置的定义输出不准确。
经过一些测试后,这是我想出的一个类型数组(其中x是未知的/未找到的):
char* classes[] = {"x" , "integer/enum/char/long/size_t" , "x" ,
"x" , "x" , "pointer/void/string/array/function" ,
"x" , "x" , "float/double" ,
"complex", "x" , "x" ,
"struct" , "union" , "x" ,
"x" , "x" , "x" };
与typecclass .h中存在的枚举比较,
enum type_class
{
no_type_class = -1,
void_type_class, integer_type_class, char_type_class,
enumeral_type_class, boolean_type_class,
pointer_type_class, reference_type_class, offset_type_class,
real_type_class, complex_type_class,
function_type_class, method_type_class,
record_type_class, union_type_class,
array_type_class, string_type_class,
lang_type_class
};
大多数我不关心的类,或者甚至找不到它们的定义来测试(record, real, lang等)我使用__builtin_classify_type的全部原因是为了识别指针,但如果它也要匹配同一个类下的空,字符串,数组和函数,那么它真的没有用处。
有人知道为什么__builtin_classify_type返回的值与typecclass .h不一致吗?
这确实不是为什么会发生这种情况的直接答案,但如果您还试图确定给定的宏标记是否显式地是指针,则更像是一种变通方法。不幸的是,如果这个内建返回预期的结果,它会更复杂一些。
你可以在下面我写的答案中找到这个解决方法:https://stackoverflow.com/a/72983424/8217821