对于下面的测试代码,预期的结果是它不会因为#error
指令而编译。
#if __has_builtin(__builtin_types_compatible_p)
#error ("Hello")
#endif
#include <stdio.h>
int main (void)
{
if (__builtin_types_compatible_p(int, const int)) {
printf("INT ARE SAME!!!\n");
}
return 0;
}
但是,它不仅可以编译,还可以打印出来INT ARE SAME!!!
,这意味着即使__builtin_types_compatible_p
存在,__has_builtin
也没有检测到它。为什么?更重要的是,是否有其他方法可以检测有效的内置功能?
这是在 Clang 3.8 和 3.9(当前的稳定分支)上测试的。代码是使用编译的clang --std=c99 -Wall -Wextra test.c
。