有预定义的宏,如__OPTIMIZE__(在所有优化编译中定义)和__OPTIMIZE_SIZE__(如果编译器正在优化大小)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,则打印一个警告。
是否有可能检查是否设置了优化级别-Ofast?可能是__OPTIMIZE_FAST__或__OPTIMIZE_SPEED__之类的。
发布于 2020-08-13 03:37:22
我检查了ARMCC命令行选项,似乎没有像许多其他编译器那样的-Ofast。但是如果行为和GCC/Clang/ICC一样的话.那么-Ofast本质上就是-O3和--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
#endifhttps://stackoverflow.com/questions/63219539
复制相似问题