4.8.1. 사전 정의된 매크로

Table 4.18은 C 및 C++에서 ARM 컴파일러가 사전 정의하는 매크로 이름을 나열합니다. 값 필드가 빈 곳에서는 심볼만 정의됩니다.

Table 4.18. 사전 정의된 매크로 

이름정의되는 경우
__arm__-

--thumb 옵션을 지정하는 경우에도 ARM 컴파일러에 대해 항상 정의됩니다.

__ARMCC_VERSION도 참조하십시오.

__ARMCC_VERSIONver

항상 정의됩니다. 10진수이며 릴리스가 바뀔 때마다 증가합니다. 형식은 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_ARM1

--thumb 옵션을 지정할 경우에도 항상 ARM 컴파일러에 대해 1로 설정됩니다.

__CHAR_UNSIGNED__- GNU 모드에서 char이 unsigned 유형인 경우에만 정의됩니다.
__DATE__date항상 정의됩니다.
__EDG__-

항상 정의됩니다.

__EDG_IMPLICIT_USING_STD-

C++ 모드에서 --implicit_using_std 옵션을 지정할 경우 정의됩니다.

__EDG_VERSION__-

EDG(Edison Design Group) 프런트 엔드의 버전 번호를 나타내는 정수 값으로 항상 설정됩니다. 예를 들어 버전 3.8은 308로 표시됩니다.

EDG 프런트 엔드의 버전 번호는 RVCT나 RVDS 버전 번호와 반드시 일치할 필요는 없습니다.

__EXCEPTIONS1

C++ 모드에서 --exceptions 옵션을 지정할 경우 정의됩니다.

__FEATURE_SIGNED_CHAR-

CHAR_MINCHAR_MAX에서 사용하는 --signed_chars 옵션을 지정할 경우 정의됩니다.

__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__verGNU 모드에서 --cpp 옵션을 지정할 경우 정의됩니다. __GNUC__ 값과 동일합니다.
__IMPLICIT_INCLUDE-

--implicit_include 옵션을 지정할 경우 정의됩니다.

__INTMAX_TYPE__- GNU 모드에서 정의됩니다. intmax_t typedef의 올바른 원본 유형을 정의합니다.
__LINE__num항상 설정됩니다. 이 매크로를 포함하는 코드 라인의 소스 행 번호입니다.
__MODULE__mod

__FILE__ 값의 파일 이름 부분을 포함합니다.

__NO_INLINE__-

GNU 모드에서 --no_inline 옵션을 지정할 경우 정의됩니다.

__OPTIMISE_LEVELnum

-Onum 옵션을 사용하여 최적화 수준을 변경하지 않는 한 항상 기본적으로 2로 설정됩니다.

__OPTIMISE_SPACE-

-Ospace 옵션을 지정할 경우 정의됩니다.

__OPTIMISE_TIME-

-Otime 옵션을 지정할 경우 정의됩니다.

__OPTIMIZE__-

GNU 모드에서 -O1 또는 -O2가 지정될 경우 정의됩니다.

__OPTIMIZE_SIZE__-

GNU 모드에서 -Ospace가 지정될 경우 정의됩니다.

__PLACEMENT_DELETE- C++ 모드에서 배치 삭제(즉, 생성자가 예외를 throw할 경우 호출되는 배치 연산자 new에 해당하는 연산자 delete)가 지정하기 위해 정의됩니다. 이것은 예외를 사용할 경우에만 관련됩니다.
__PTRDIFF_TYPE__- GNU 모드에서 ptrdiff_t typedef의 올바른 원본 유형을 정의합니다.
__RTTI- C++ 모드에서 RTTI가 사용 가능할 경우 정의됩니다.
__sizeof_int4

sizeof(int)를 위한 것이지만 사전 처리기 식에서 사용 가능합니다.

__sizeof_long4

sizeof(long)을 위한 것이지만 사전 처리기 식에서 사용 가능합니다.

__sizeof_ptr4

sizeof(void *)를 위한 것이지만 사전 처리기 식에서 사용 가능합니다.

__SIZE_TYPE__- GNU 모드에서 size_t typedef의 올바른 원본 유형을 정의합니다.
__SOFTFP__-

소프트웨어 부동 소수점 호출 표준과 라이브러리를 사용하도록 컴파일할 경우 정의됩니다. ARM 또는 Thumb에서 --fpu=softvfp 옵션을 지정할 경우이거나 Thumb에서 --fpu=softvfp+vfpv2를 지정할 경우 정의됩니다.

__STDC__- 모든 컴파일러 모드에서 정의됩니다.
__STDC_VERSION__- 표준 버전 정보입니다.
__STRICT_ANSI__-

--strict 옵션을 지정할 경우 정의됩니다.

__TARGET_ARCH_ARMnum타겟 CPU의 ARM 기본 아키텍처의 수(컴파일러가 ARM에 대해 컴파일하거나 Thumb에 대해 컴파일하거나 관계 없음)
__TARGET_ARCH_THUMBnum타겟 CPU의 Thumb 기본 아키텍처의 수(컴파일러가 ARM에 대해 컴파일하거나 Thumb에 대해 컴파일하거나 관계 없음). 타겟이 Thumb를 지원하지 않을 경우 이 값은 0으로 정의됩니다.
__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- ARMv5TE에서와 같이 DSP 승수를 사용할 수 있는 경우 정의됩니다.
__TARGET_FEATURE_MULTIPLY-

타겟 아키텍처가 long 곱하기 명령어 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 코드를 생성할 수 있습니다.

  • __thumb__thumb__#pragma thumb 또는 #pragma arm을 사용할 경우 정의되거나 정의되지 않게 됩니다. 하지만 Thumb 함수가 다른 이유로 인해 ARM 코드로 생성될 경우에는 변경되지 않습니다(예: __irq로 지정된 함수).

__TIME__time

항상 정의됩니다.

__UINTMAX_TYPE__- GNU 모드에서 정의됩니다. uintmax_t typedef의 올바른 원본 유형을 정의합니다.
__VERSION__ver

--gnu 옵션을 지정할 경우 정의됩니다. 사용 중인 GNU 모드의 현재 버전을 보여 주는 문자열입니다.

_WCHAR_T-

C++ 모드에서 wchar_t가 키워드임을 지정할 경우 정의됩니다.

__WCHAR_TYPE__- GNU 모드에서 정의됩니다. wchar_t typedef의 올바른 원본 유형을 지정합니다.
__WCHAR_UNSIGNED__- GNU 모드에서 --cpp 옵션을 지정할 경우 정의됩니다. wchar_t가 unsigned 유형인 경우에만 정의됩니다.
__WINT_TYPE__- GNU 모드에서 정의됩니다. wint_t typedef의 올바른 원본 유형을 지정합니다.
Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential