优化级别的宏 (ARMCC V6)

Macro for optimization level (ARMCC V6)

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

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

是否可以检查是否设置了优化级别-Ofast? 可能类似于 __OPTIMIZE_FAST____OPTIMIZE_SPEED__.

我检查了ARMCC command line options and it seems there's no -Ofast like in many other compilers. However if the behavior is the same as in GCC/Clang/ICC... then -Ofast is essentially just -O3 with --fpmode=fast so you can check it with __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