0

有预定义的宏,例如__OPTIMIZE__ (在所有优化编译中__OPTIMIZE_SIZE__ 定义)和(如果编译器正在优化大小,则定义)。

我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。

是否有可能检查是否-Ofast设置了优化级别?可能类似于__OPTIMIZE_FAST__or __OPTIMIZE_SPEED__

4

1 回答 1

0

我检查了ARMCC 命令行选项,似乎-Ofast在许多其他编译器中都没有。但是,如果行为与 GCC/Clang/ICC... 中的行为相同...则-Ofast本质上只是-O3with--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
于 2020-08-13T03:37:22.670 回答