ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
编译器维护并识别表 2-30 中列出的预定义宏名称。
宏名称 | 说明 |
---|---|
__16bis__ | 如果选择了 16-BIS 状态(使用了 -code_state=16 选项),则已定义;否则未定义。 |
__32bis__ | 如果选择了 32-BIS 状态(未使用 -code_state=16 选项),则已定义;否则未定义。 |
_AEABI_PORTABILITY_LEVEL | 定义为 1,以便在包含头文件时,全面移植目标文件。定义为 0以便完全兼容 C 标准。有关详细信息,请参阅 ARM 标准。 |
__big_endian__ | 如果选择了大端模式(使用了 --endian=big 选项或未使用 --endian=little 选项),则已定义;否则未定义。 |
__DATE__(1) | 以mmm dd yyyy 形式扩展到编译日期 |
__FILE__(1) | 扩展到当前源文件名 |
_INLINE | 如果使用了优化(--opt_level 或 -O 选项),则扩展为 1;否则未定义。 |
__LINE__(1) | 扩展到当前行号 |
__little_endian__ | 如果选择了小端模式(使用了 --endian=little 选项),则已定义;否则未定义。 |
__PTRDIFF_T_TYPE__ | 定义为 ptrdiff_t 类型 |
__signed_chars__ | 如果 char 类型默认为有符号类型,则已定义 |
__SIZE_T_TYPE__ | 定义为 size_t 类型 |
__STDC__(1) | 定义为 1 以表示编译器符合 ISO C 标准。有关ISO C标准的例外情况,请参阅节 5.1。 |
__STDC_VERSION__ | C 标准宏。 |
__STDC_HOSTED__ | C 标准宏。始终定义为 1。 |
__STDC_NO_THREADS__ | C 标准宏。始终定义为 1。 |
__TI_COMPILER_VERSION__ | 已定义为 7-9 位整数,具体取决于 X 是 1、2 还是 3 位。该数字不包含小数。例如,版本 3.2.1 表示为 3002001。去掉前导零以防止数字被解释为八进制。 |
__TI_EABI_SUPPORT__ | 如果启用了 EABI ABI(这是默认设置),则定义为 1;否则未定义。 |
__TI_FPALIB_SUPPORT__ | 如果 FPA 字节序用于存储双精度浮点值,则定义为 1;否则未定义。 |
__TI_GNU_ATTRIBUTE_SUPPORT__ | 如果启用了 GCC 扩展(这是默认设置),则定义为 1 |
__TI_NEON_SUPPORT__ | 如果目标是 NEON SIMD 扩展(使用了 --neon 选项),则定义为 1;否则未定义。 |
__TI_STRICT_ANSI_MODE__ | 如果启用了严格的ANSI/ISO 模式(使用了 --strict_ansi 选项),则定义为 1;否则定义为 0。 |
__TI_STRICT_FP_MODE__ | 如果使用了 --fp_mode=strict(默认设置),则定义为 1;否则定义为 0。 |
__TI_ARM__ | 始终已定义 |
__TI_ARM_V4__ | 如果目标是 v4 架构 (ARM7)(使用 -mv4 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V5__ | 如果目标是 v5E 架构 (ARM9E)(使用 -mv5e 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V6__ | 如果目标是 v6 架构 (ARM11)(使用了 -mv6 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V6M0__ | 如果目标是 v6M0 架构 (Cortex-M0)(使用了 -mv6M0 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V7__ | 如果目标是任意 v7 架构 (Cortex),则定义为 1;否则未定义。 |
__TI_ARM_V7A8__ | 如果目标是 v7A8 架构 (Cortex-A8)(使用了 -mv7A8 选项),则定义为 1;否则未定义。 |
__TI_ARM_V7M3__ | 如果目标是 v7M3 架构 (Cortex-M3)(使用了 -mv7M3 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V7M4__ | 如果目标是 v7M4 架构 (Cortex-M4)(使用了 -mv7M4 选项),则已定义为 1;否则未定义。 |
__TI_ARM_V7R4__ | 如果目标是 v7R4 架构 (Cortex-R4)(使用了 -mv7R4 选项),则定义为 1;否则未定义。 |
__TI_ARM_V7R5__ | 如果目标是 v7R5 架构 (Cortex-R5)(使用了 -mv7R5 选项),则定义为 1;否则未定义。 |
__TI_FPV4SPD16_SUPPORT__ | 如果启用了 VFP 协处理器(使用了 --float_support=fpv4spd16 选项),则定义为 1;否则未定义。 |
__TI_VFP_SUPPORT__ | 如果启用了 VFP 协处理器(使用了任意 --float_support 选项),则定义为 1;否则未定义。 |
__TI_VFPLIB_SUPPORT__ | 如果 VFP 字节序用于存储双精度浮点值,则定义为 1;否则未定义。 |
__TI_VFPV3_SUPPORT__ | 如果启用了 VFP 协处理器(使用了 --float_support=vfpv3 选项),则定义为 1;否则未定义。 |
__TI_VFPV3D16_SUPPORT__ | 如果启用了 VFP 协处理器(使用了 --float_support=vfpv3d16 选项),则定义为 1;否则未定义。 |
__TI_WCHAR_T_BITS__ | 定义为 wchar_t 类型。 |
__TIME__(1) | 以“hh:mm:ss”形式扩展到编译时间 |
__unsigned_chars__ | 如果 char 类型默认为无符号类型(默认设置),则已定义 |
__WCHAR_T_TYPE__ | 定义为 wchar_t 类型。 |
名称中包含 __TI_ARM 的宏是旧的 __TI_TMS470 宏的副本。例如,__TI_ARM_V7__ 是 __TI_TMS470_V7__ 宏的新名称。旧的宏名称仍然存在并且可以继续使用。
可以按照与任何其他已定义名称相同的方式使用表 2-30 中列出的名称。例如,
printf ( "%s %s" , __TIME__ , __DATE__);
转换为类似如下行:
printf ("%s %s" , "13:58:17", "Jan 14 1997");
此外,ARM C 语言扩展 (ACLE) v2.0 规范描述了标识 ARM 架构特征的宏以及 C/C++ 实现如何使用该架构。所有 ACLE 预定义宏都以前缀 __ARM 开头。表 2-31 列出了 ACLE 规范中提到的宏以及规范中可提供更多信息的章节。有些宏未定义,是因为这些宏不适用于任何 Cortex-M 或 Cortex-R 处理器变体。
宏名称 | 说明 | ACLE 规范章节 |
---|---|---|
__ARM_32BIT_STATE | 如果编译器为 ARM 32 位处理器变体生成代码(-mv6m0、-mv7m3、-mv7m4、-mv7a8、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.1 节) |
__ARM_64BIT_STATE | 未定义 | (第 5.4.1 节) |
__ARM_ACLE | 对于所有 Cortex-M 和 Cortex-R 处理器变体(-mv6m0、-mv7m3、-mv7m4、-mv7r4 和 -mv7r5),定义为 200。 | (第 3.4、5.2 节) |
__ARM_ALIGN_MAX_PWR | 不支持 | (第 6.5.2 节) |
__ARM_ALIGN_MAX_STACK_PWR | 不支持 | (第 6.5.3 节) |
__ARM_ARCH | 确定在编译器命令行上选择的 ARM 架构版本。
|
(第 5.1 节) |
__ARM_ARCH_ISA_A64 | 未定义 | (第 5.4.1 节) |
__ARM_ARCH_ISA_ARM | 如果编译器为支持 ARM 指令集的处理器变体生成代码(-mv7a8、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.1 节) |
__ARM_ARCH_ISA_THUMB | 如果编译器为支持 THUMB-1 指令集的处理器变体生成代码,则定义为 1。如果编译器为支持 THUMB-2 指令集的处理器变体生成代码,则定义为 2;否则未定义。 | (第 5.4.1 节) |
__ARM_ARCH_PROFILE | 不支持 | (第 5.4.2 节) |
__ARM_BIG_ENDIAN | 默认定义为 1;如果使用了 --little-endian (-me) 选项,则未定义。 | (第 5.3 节) |
__ARM_FEATURE_CLZ | 如果编译器为支持 CLZ 指令的处理器变体生成代码(-mv7m3、-mv7m4、-mv7a8、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.5 节) |
__ARM_FEATURE_COPROC | 不支持 | (第 5.9 节) |
__ARM_FEATURE_CRC32 | 未定义 | (第 5.5.8 节) |
__ARM_FEATURE_CRYPTO | 未定义 | (第 5.5.7 节) |
__ARM_FEATURE_DIRECTED_ROUNDING | 未定义 | (第 5.5.9 节) |
__ARM_FEATURE_DSP | 如果编译器为支持 DSP 指令/内在函数的 Cortex-M 或 Cortex-R 处理器生成代码(-mv7m4、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.7 节) |
__ARM_FEATURE_FMA | 不支持 | (第 5.5.3 节) |
__ARM_FEATURE_FP16_SCALAR_ ARITHMETIC | 未定义 | (第 3.4、5.5.13 节) |
__ARM_FEATURE_FP16_VECTOR_ ARITHMETIC | 未定义 | (第 5.5.13 节) |
__ARM_FEATURE_IDIV | 不支持 | (第 5.4.10 节) |
__ARM_FEATURE_JCVT | 未定义 | (第 5.5.14 节) |
__ARM_FEATURE_LDREX | 未定义 | (第 5.4.4 节) |
__ARM_FEATURE_NUMERIC_MAXMIN | 未定义 | (第 5.5.10 节) |
__ARM_FEATURE_QBIT | 不支持 | (第 5.4.6 节) |
__ARM_FEATURE_QRDMX | 未定义 | (第 5.5.12 节) |
__ARM_FEATURE_SAT | 如果编译器为支持 SSAT/USAT 指令/内在函数的处理器变体生成代码(-mv7m3、-mv7m4、-mv7a8、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.8 节) |
__ARM_FEATURE_SIMD32 | 如果编译器为支持所有 SIMD 指令/内在函数的处理器变体生成代码(-mv7m4、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.9 节) |
__ARM_FEATURE_UNALIGNED | 如果编译器为支持对存储器进行无符号访问的处理器变体生成代码(-mv7m3、-mv7m4、-mv7a8、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.4.3 节) |
__ARM_FP | 对于 --float_support={fpv4spd16 | fpv5spd16},定义为 6。对于 --float_support={vfpv2 | vfpv3 | vfpv3d16},定义为 12;否则未定义。 | (第 5.5.1 节) |
__ARM_FP16_ARGS | 如果将 16 位浮点类型可以用于参数和/或结果,则定义为 1;否则未定义。 | (第 5.5.11 节) |
__ARM_FP16_FORMAT_ALTERNATIVE | 未定义 | (第 5.5.2 节) |
__ARM_FP16_FORMAT_IEEE | 如果使用了 IEEE 格式的16 位浮点(根据 IEEE 754-2008 标准),则定义为 1;否则未定义。 | (第 5.5.2 节) |
__ARM_FP_FAST | 不支持 | (第 5.6 节) |
__ARM_FP_FENV_ROUNDING | 不支持 | (第 5.6 节) |
__ARM_NEON | 未定义 | (第 3.4、5.5.4 节) |
__ARM_NEON_FP | 未定义 | (第 5.5.5 节) |
__ARM_PCS | 如果编译器可以假设转换单元的默认程序调用标准符合 ARM 架构程序调用标准 (AAPCS) 规范中规定的“基础程序调用标准”(-mv7m3、-mv7m4、-mv7r4 和 -mv7r5),则定义为 1;否则未定义。 | (第 5.7 节) |
__ARM_PCS_AAPCS64 | 未定义 | (第 5.7 节) |
__ARM_PCS_VFP | 如果默认程序调用约定是在硬件浮点寄存器中传递浮点参数/返回值,则定义为 1;否则未定义。 | (第 5.7 节) |
__ARM_ROPI | 未定义 | (第 5.8 节) |
__ARM_RWPI | 未定义 | (第 5.8 节) |
__ARM_SIZEOF_MINIMAL_ENUM | 定义为最小的枚举类型大小(packed 为 1 个字节,int 为 4 个字节)。这反映了 --enum_type=[packed | int] 选项,其中packed是默认值。 | (第 3.1.1 节) |
__ARM_SIZEOF_WCHAR_T | 如果 --wchar_t=16(默认设置),则定义为 2。如果 --wchar_t=32,则定义为 4。 | (第 3.1.1 节) |
__ARM_WMMX | 未定义 | (第 5.5.6 节) |
__STDC_IEC_559__ | 未定义 | (第 5.6 节) |
__SUPPORT_SNAN__ | 不支持 | (第 5.6 节) |