3.4. 사전 정의된 매크로

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

Table 3.3. 사전 정의된 매크로

이름정의되는 경우
__arm__

ARM 컴파일러에 항상 정의되는 매크로 이름으로, --thumb 옵션을 지정할 경우에도 정의됩니다.

__ARMCC_VERSION도 참조하십시오.

Note

이 매크로는 armcpp, tcctcpp 명령어를 사용하여 ARM 컴파일러를 호출해도 정의됩니다.

__ARMCC_VERSIONver

항상 정의됩니다. 10진수이며 릴리스가 바뀔 때마다 증가합니다. 포맷은 PVtbbb이며 여기서,

  • P는 주 버전입니다.

  • V는 부 버전입니다.

  • t는 패치 릴리스입니다.

  • bbb는 빌드 번호입니다.

현재 릴리스의 값은 Table 3.4를 참조하십시오.

Note

이것을 사용하여 RVCT와 __arm__을 정의하는 다른 도구를 구분하십시오.

__APCS_ADSABI

--apcs /adsabi 옵션을 지정할 경우

__APCS_INTERWORK

--apcs /interwork 옵션을 지정하거나 CPU 아키텍처를 ARMv5TE 이후 버전으로 설정할 경우

__APCS_ROPI

--apcs /ropi 옵션을 지정할 경우

__APCS_RWPI

--apcs /rwpi 옵션을 지정할 경우

__APCS_FPIC

--apcs /fpic 옵션을 지정할 경우

__ARRAY_OPERATORSC++ 컴파일러 모드에서 배열 새로 만들기 및 삭제를 사용 가능하도록 지정합니다.
__BASE_FILE__name

항상 정의됩니다. __FILE__과 유사하지만 현재 파일이 아니라 기본 소스 파일을 나타냅니다(즉, 현재 파일이 포함된 파일일 경우).

__BIG_ENDIAN빅엔디안 타겟에 대해 컴파일할 경우
_BOOL

C++ 컴파일러 모드에서 bool이 키워드임을 지정할 경우

__cplusplusC++ 컴파일러 모드에서
__CC_ARM1

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

Note

이 매크로는 armcpp, tcctcpp 명령어를 사용하여 ARM 컴파일러를 호출해도 정의됩니다.

__DATE__date항상 정의됩니다.
__EDG__

항상 정의됩니다.

__EDG_IMPLICIT_USING_STD

C++ 컴파일러 모드에서, --implicit_using_std 옵션을 지정할 경우

__EDG_VERSION__

EDG 프런트 엔드의 버전 번호를 나타내는 정수 값으로 항상 설정됩니다. 예를 들어, 버전 36은 306으로 표시됩니다.

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

__EXCEPTIONS1

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 모드의 현재 주 버전을 보여주는 정수입니다.

현재 릴리스의 값은 Table 3.4를 참조하십시오.

__GNUC_MINOR__ver

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

현재 릴리스의 값은 Table 3.4를 참조하십시오.

__IMPLICIT_INCLUDE

--implicit_include 옵션을 지정할 경우

__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_DELETEC++ 컴파일러에서 배치 삭제가 사용 가능하도록 지정합니다. 이것은 예외를 사용할 경우에만 관련됩니다.
__RTTIC++ 컴파일러 모드에서 RTTI가 사용 가능할 경우
__sizeof_int4

sizeof(int)를 위한 것이지만, 선처리 프로세서 식에서 사용 가능합니다.

__sizeof_long4

sizeof(long)를 위한 것이지만, 선처리 프로세서 식에서 사용 가능합니다.

__sizeof_ptr4

sizeof(void *)를 위한 것이지만, 선처리 프로세서 식에서 사용 가능합니다.

__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

타겟 아키텍처가 PLD, LDRD, STRD, MCRRMRRC 명령어를 지원할 경우. 즉, ARMv5T 이상입니다.

__TARGET_FEATURE_DSPMULARMv5TE에서와 같이 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 옵션에 대한 자세한 내용은 타겟 프로세서 또는 아키텍처 지정에서 --fpu vfp 옵션에 대한 설명을 참조하십시오.

__thumb__

컴파일러가 Thumb 모드일 경우. 즉, 명령 행에서 --thumb 옵션을 지정했거나 소스 코드에서 #pragma thumb을 지정했을 경우입니다.

Note

  • 컴파일러는 Thumb에 대해 컴파일할 경우에도 ARM 코드를 생성할 수 있습니다.

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

__TIME__time

항상 정의됩니다.

__VERSION__ver

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

현재 릴리스의 값은 Table 3.4를 참조하십시오.

_WCHAR_T

C++ 컴파일러 모드에서 wchar_t가 키워드임을 지정할 경우

Table 3.4는 현재 릴리스의 컴파일러의 사전 정의된 매크로의 값을 나열합니다. 이 값들은 설치된 프로그램을 업그레이드할 경우 변경될 수 있습니다.

Table 3.4. 현재 릴리스의 매크로 값

이름
__ARMCC_VERSION

릴리스가 바뀔 때마다 값이 증가하도록 보장하며, 포맷은 PVtbbb입니다. 여기서 각 요소는 다음을 나타냅니다.

  • P = 3

  • V = 0

  • t = 0 (패치되지 않음)

  • bbb = 빌드 번호, 예를 들면, 503입니다.

제공된 예제의 결과는 300503입니다.

__GNUC__

GNU 모드의 주 버전 = 3

__GNUC_MINOR__

GNU 모드의 부 버전 = 3

__VERSION__

GNU 모드의 현재 버전 = "EDG gcc 3.3 mode"

매크로 명령 행 옵션을 지정하면 컴파일러에서 다음 순서로 매크로를 정의하고 정의를 해제합니다.

  1. 컴파일러 사전 정의 매크로

  2. -Dname을 사용하여 명시적으로 정의한 매크로

  3. -Uname을 사용하여 명시적으로 정의가 해제된 매크로

자세한 내용은 선처리 프로세서 옵션 설정을 참조하십시오.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0205GK
Non-Confidential