有预定义的宏,例如__OPTIMIZE__
(在所有优化编译中__OPTIMIZE_SIZE__
定义)和(如果编译器正在优化大小,则定义)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。
是否有可能检查是否-Ofast
设置了优化级别?可能类似于__OPTIMIZE_FAST__
or __OPTIMIZE_SPEED__
。
有预定义的宏,例如__OPTIMIZE__
(在所有优化编译中__OPTIMIZE_SIZE__
定义)和(如果编译器正在优化大小,则定义)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。
是否有可能检查是否-Ofast
设置了优化级别?可能类似于__OPTIMIZE_FAST__
or __OPTIMIZE_SPEED__
。
我检查了ARMCC 命令行选项,似乎-Ofast
在许多其他编译器中都没有。但是,如果行为与 GCC/Clang/ICC... 中的行为相同...则-Ofast
本质上只是-O3
with--fpmode=fast
因此您可以使用 进行检查__FP_FAST
,可能与__OPTIMISE_LEVEL
在 GCC 中,您可以使用__FAST_MATH__
. __NO_MATH_ERRNO__
也可以使用,尽管它可能不是完全匹配,因为如果-fno-math-errno
指定了它也将被定义
#ifdef __OPTIMIZE__
printf("Optimized\n");
#ifdef __ARMCC_VERSION
#if defined(__FP_FAST) && __OPTIMISE_LEVEL >= 3
printf("-Ofast ARMCC\n");
#endif
#elif defined(__GNUC__)
#if defined(__FAST_MATH__)
// #if defined(__NO_MATH_ERRNO__)
printf("-Ofast GNUC\n");
#endif
#endif
#endif