c - __builtin_classify_type没有按照typecclass .h中的定义返回



我试图检查给定的宏标记是否为指针(__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

最新更新