私は C で書かれたプログラムに取り組んでおり、基本的にバグをキャッチするためにアドレスサニタイザーを使用して構築することがあります。プログラムは、起動時にログにバナーを出力し、ビルド者、ビルドされたブランチ、コンパイラなどの情報を表示します。バイナリがアドレスサニタイザーを使用してビルドされているかどうかも詳しく説明するとよいと思いました。 . __has_feature(address_sanitizer) があることは知っていますが、それは clang でしか機能しません。次の簡単なプログラムを試しました。
#include <stdio.h>
int main()
{
#if defined(__has_feature)
# if __has_feature(address_sanitizer)
printf ("We has ASAN!\n");
# else
printf ("We have has_feature, no ASAN!\n");
# endif
#else
printf ("We got nothing!\n");
#endif
return 0;
}
でビルドするとgcc -Wall -g -fsanitize=address -o asan asan.c
、次の結果が得られます。
We got nothing!
私はclang -Wall -g -fsanitize=address -o asan asan.c
得る:
We has ASAN!
__has_feature に相当する gcc はありますか?
アドレスサニタイザーで構築されたプログラムの巨大なVSZ値のように、コンパイル時の定義などがあるかどうか疑問に思っているだけで、チェックする方法があることを私は知っています。