【发布时间】:2017-08-02 08:02:55
【问题描述】:
对于下面的测试代码,预期的结果是由于#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编译。
【问题讨论】:
标签: c clang c99 built-in clang-extensions