次のテストコードに関しては、#error
ディレクティブのためにコンパイルされないと予想されます。Clangの__has_builtinが常に機能しない
#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;
}
しかし、それはコンパイルだけでなく、それはまた__builtin_types_compatible_p
が存在するにもかかわらず、__has_builtin
がそれを検出していないことを意味するINT ARE SAME!!!
をプリントアウトします。それはなぜです?さらに重要なのは、組み込み関数を検出する他の方法がありますか?
これは、Clang 3.8および3.9(現在の安定した分岐)でテストされました。コードはclang --std=c99 -Wall -Wextra test.c
を使用してコンパイルされました。