4.8.1. 预定义宏

Table 4.18 列出了 ARM 编译器为 C 和 C++ 预定义的宏名称。 如果值字段为空,则表明只定义了符号。

Table 4.18. 预定义宏 

名称 定义时间
__arm __ -

始终为 ARM 编译器定义,即使指定了 --thumb 选项。

另请参阅 __ARMCC_VERSION

__ARMCC_VERSION ver

始终定义。 它是一个十进制数字,可确保随着版本的更新而增加。 格式为 PVtbbb,其中:

  • P 是主版本

  • V 是次版本

  • t 是修补版

  • bbb 是内部版本号。

Note

可以使用此编号区别 RVCT 和用于定义 __arm__ 的其他工具。

__APCS_INTERWORK -

指定 --apcs /interwork 选项或将 CPU 体系结构设置为 ARMv5T 或更高版本时。

__APCS_ROPI -

指定 --apcs /ropi 选项时。

__APCS_RWPI -

指定 --apcs /rwpi 选项时。

__APCS_FPIC -

指定 --apcs /fpic 选项时。

__ARRAY_OPERATORS - 在 C++ 编译器模式下指定启用数组新建和删除。
__BASE_FILE__ name

始终定义。 类似于 __FILE__,但指示的是主源文件而不是当前文件(即,当前文件是所包含的文件时)。

__BIG_ENDIAN - 如果为大端目标进行编译。
_BOOL -

在 C++ 编译器模式下,将 bool 指定为关键字。

__cplusplus - 在 C++ 编译器模式下。
__CC_ARM 1

对于 ARM 编译器,始终设置为 1,即使指定了 --thumb 选项。

__CHAR_UNSIGNED__ - 在 GNU 模式下。 当且仅当 char 为无符号类型时,才会对其进行定义。
__DATE__ date 始终定义。
__EDG__ -

始终定义。

__EDG_IMPLICIT_USING_STD -

在 C++ 模式下指定 --implicit_using_std 选项时。

__EDG_VERSION__ -

始终设置为整型值,它表示 Edison Design Group (EDG) 前端的版本号。 例如,将 3.8 版表示为 308

EDG 前端的版本号不必与 RVCT 或 RVDS 版本号相匹配

__EXCEPTIONS 1

在 C++ 模式下指定 --exceptions 选项时。

__FEATURE_SIGNED_CHAR -

指定 --signed_chars 选项(由 CHAR_MINCHAR_MAX 使用)时。

__FILE__ name 始终定义为字符串文字。
__FP_FAST -

指定 --fpmode=fast 选项时。

__FP_FENV_EXCEPTIONS -

指定 --fpmode=ieee_full--fpmode=ieee_fixed 选项时。

__FP_FENV_ROUNDING -

指定 --fpmode=ieee_full 选项时。

__FP_IEEE -

指定 --fpmode=ieee_full--fpmode=ieee_fixed--fpmode=ieee_no_fenv 选项时。

__FP_INEXACT_EXCEPTION -

指定 --fpmode=ieee_full 选项时。

__GNUC__ ver

指定 --gnu 选项时。 它是一个整数,用于显示所使用的 GNU 模式的当前主版本。

__GNUC_MINOR__ ver

指定 --gnu 选项时。 它是一个整数,用于显示所使用的 GNU 模式的当前次版本。

__GNUG__ ver 在 GNU 模式下指定 --cpp 选项时。 它具有与 __GNUC__ 相同的值。
__IMPLICIT_INCLUDE -

指定 --implicit_include 选项时。

__INTMAX_TYPE__ - 在 GNU 模式下。 它为 intmax_ttypedef 定义正确的基础类型。
__LINE__ num 始终设置。 它是包含此宏的源代码行的行号。
__MODULE__ mod

包含 __FILE__ 值的文件名部分。

__NO_INLINE__ -

在 GNU 模式下指定 --no_inline 选项时。

__OPTIMISE_LEVEL num

缺省情况下,始终设置为 2,除非使用 -Onum 选项更改了优化级别。

__OPTIMISE_SPACE -

指定 -Ospace 选项时。

__OPTIMISE_TIME -

指定 -Otime 选项时。

__OPTIMIZE__ -

在 GNU 模式下指定 -O1-O2 时。

__OPTIMIZE_SIZE__ -

在 GNU 模式下指定 -Ospace 时。

__PLACEMENT_DELETE - 在 C++ 模式下指定启用位置删除(即,在构造函数抛出异常时调用的与位置运算符 new 对应的运算符 delete)。 这仅适用于使用异常的情况。
__PTRDIFF_TYPE__ - 在 GNU 模式下。 它为 ptrdiff_ttypedef 定义正确的基础类型。
__RTTI - 在 C++ 模式下启用 RTTI 时。
__sizeof_int 4

用于 sizeof(int),但在预处理程序表达式中可用。

__sizeof_long 4

用于 sizeof(long),但在预处理程序表达式中可用。

__sizeof_ptr 4

用于 sizeof(void *),但在预处理程序表达式中可用。

__SIZE_TYPE__ - 在 GNU 模式下。 它为 size_ttypedef 定义正确的基础类型。
__SOFTFP__ -

如果编译为使用软件浮点调用标准和库。 为 ARM 或 Thumb 指定 --fpu=softvfp 选项或者为 Thumb 指定 --fpu=softvfp+vfpv2 时设置。

__STDC__ - 在所有编译器模式下。
__STDC_VERSION__ - 标准版本信息。
__STRICT_ANSI__ -

指定 --strict 选项时。

__TARGET_ARCH_ARM num 目标 CPU 的 ARM 基本体系结构编号,与编译器为 ARM 还是为 Thumb 进行编译无关。
__TARGET_ARCH_THUMB num 目标 CPU 的 Thumb 基本体系结构编号,与编译器为 ARM 还是为 Thumb 进行编译无关。 如果目标不支持 Thumb,则将值定义为零。
__TARGET_ARCH_xx -

xx 表示目标体系结构,它的值取决于目标体系结构。 例如,如果指定编译器选项 --cpu=4T--cpu=ARM7TDMI,则会定义 __TARGET_ARCH_4T

__TARGET_CPU_xx -

xx 表示目标 CPU。 xx 值是从 --cpu 编译器选项中获取的,如果没有指定任何选项,则使用缺省值。 例如,如果指定编译器选项 --cpu=ARM7TM,则会定义 __TARGET_CPU_ARM7TM,而不会定义以 __TARGET_CPU_ 开头的任何其他符号。

如果指定了目标体系结构,则会定义 __TARGET_CPU_generic

如果处理器名称包含连字符 (-),则会将其映射为下划线 (_)。 例如,将 --cpu=ARM1136JF-S 映射为 __TARGET_CPU_ARM1136JF_S

__TARGET_FEATURE_DOUBLEWORD -

ARMv5T 和更高版本。

__TARGET_FEATURE_DSPMUL - 如果可以使用 DSP 增强的乘法器,例如 ARMv5TE。
__TARGET_FEATURE_MULTIPLY -

如果目标体系结构支持长整型乘法指令 MULLMULAL

__TARGET_FEATURE_DIVIDE -

如果目标体系结构支持硬件除法指令(即,ARMv7-M 或 ARMv7-R)。

__TARGET_FEATURE_THUMB - 如果目标体系结构支持 Thumb、ARMv4T 或更高版本。
__TARGET_FPU_xx -

设置以下宏之一以指示使用 FPU 的情形:

  • __TARGET_FPU_NONE

  • __TARGET_FPU_VFP

  • __TARGET_FPU_SOFTVFP

另外,如果编译 --fpu=softvfp+vfpv2--fpu=softvfp+vfpv3,则还会设置 __TARGET_FPU_SOFTVFP_VFPV2__TARGET_FPU_SOFTVFP_VFPV3

有关详细信息,请参阅--fpu=name

__thumb __ -

编译器处于 Thumb 模式时。 即,在命令行指定了 --thumb 选项或在源代码中指定了 #pragma thumb

Note

  • 即使为 Thumb 进行编译,编译器也可能会生成某些 ARM 代码。

  • 在使用 #pragma thumb#pragma arm 时,将会定义或不定义 __thumb__thumb__,但在作为 ARM 代码生成 Thumb 函数的情况下,它们不会由于其他原因(例如,将函数指定为 __irq)而发生改变。

__TIME__ time

始终定义。

__UINTMAX_TYPE__ - 在 GNU 模式下。 它为 uintmax_ttypedef 定义正确的基础类型。
__VERSION__ ver

指定 --gnu 选项时。 它是一个字符串,用于显示所使用的 GNU 模式的当前版本。

_WCHAR_T -

在 C++ 模式下,将 wchar_t 指定为关键字。

__WCHAR_TYPE__ - 在 GNU 模式下。 它为 wchar_ttypedef 定义正确的基础类型。
__WCHAR_UNSIGNED__ - 在 GNU 模式下指定 --cpp 选项时。 当且仅当 wchar_t 为无符号类型时,才会对其进行定义。
__WINT_TYPE__ - 在 GNU 模式下。 它为 wint_ttypedef 定义正确的基础类型。
Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential