我正在开发一个用 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 值,只是想知道是否有编译时定义或其他东西。