The following standard conditional symbols are defined:
Category | Symbol | DCC32 | DCC64 Since XE2 | DCCOSX Since XE2 | DCCIOSARM Since XE3 | DCCIOS32 Since XE3 | DCCAARM In XE5 | DCCIOSARM64 Since XE8 | Comments |
---|---|---|---|---|---|---|---|---|---|
Compiler | DCC | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | |
VER300 For a list of compiler versions, see Compiler Versions. | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | For Delphi Seattle, compiler has VER300 defined. | |
Platform | CONSOLE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Defined if an application is being compiled as a console application. |
IOS | not defined | not defined | not defined | DEFINED | DEFINED | not defined | DEFINED | Defined if the target platform is iOS. *New* in XE4/iOS | |
IOS32 | not defined | not defined | not defined | DEFINED | DEFINED | not defined | not defined | Defined if the target platform is iOS32. Since XE8/iOSarm64 | |
IOS64 | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | Defined if the target platform is iOS64. Since XE8/iOSarm64 | |
NATIVECODE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Since Delphi.Net | |
MSWINDOWS | DEFINED | DEFINED | not defined | not defined | not defined | not defined | not defined | Indicates that the operating environment is Windows. Use MSWINDOWS to test for any flavor of the Windows platform instead of WIN32. | |
WIN32 | DEFINED | not defined | not defined | not defined | not defined | not defined | not defined | Target platform is the native 32-bit Windows platform. | |
WIN64 | not defined | DEFINED | not defined | not defined | not defined | not defined | not defined | Target platform is 64-bit Windows. *New* in XE2/x64 | |
MACOS | not defined | not defined | DEFINED | DEFINED | DEFINED | not defined | DEFINED | Target platform is Mac OS X. *New* in XE2/OSX | |
MACOS32 | not defined | not defined | DEFINED | DEFINED | DEFINED | not defined | not defined | Target platform is 32-bit Mac OS X. *New* in XE2/OSX | |
MACOS64 | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | Target platform is 64-bit Mac OS X. *New* in XE8/OSX | |
LINUX | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Since Kylix | |
LINUX32 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Since Kylix | |
POSIX | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Since Kylix | |
POSIX32 | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Since Kylix | |
ANDROID | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | Defined if the target platform is Android. *New in XE5 | |
CPU | CPUARM | not defined | not defined | not defined | DEFINED | not defined | DEFINED | DEFINED | Defined if the CPU is based on the ARM architecture, such as the Delphi mobile compiler for the iOS device (DCCIOSARM.EXE). *New* in XE4/iOS |
CPU386 | DEFINED | not defined | DEFINED | not defined | DEFINED | not defined | not defined | Indicates that the CPU is an Intel 386 or later. | |
CPUX86 | DEFINED | not defined | DEFINED | not defined | DEFINED | not defined | not defined | CPU is an Intel 386 or later on any platform. *New* in XE2/x64 | |
CPUX64 | not defined | DEFINED | not defined | not defined | not defined | not defined | not defined | The CPU supports the x86-64 instruction set, and is in a 64-bit environment. *New* in XE2/x64 | |
CPU32BITS | DEFINED | not defined | DEFINED | DEFINED | DEFINED | DEFINED | not defined | The CPU is in a 32-bit environment, such as DCC32.EXE. *New* in XE8 | |
CPU64BITS | not defined | DEFINED | not defined | not defined | not defined | not defined | DEFINED | The CPU is in a 64-bit environment, such as DCC64.EXE. *New* in XE8 | |
CPUARM32 | not defined | not defined | not defined | DEFINED | not defined | DEFINED | not defined | The CPU is in a 32-bit ARM environment, such as DCCIOSARM.EXE. *New* in XE8 | |
CPUARM64 | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | The CPU is in a 64-bit ARM environment, such as DCCIOSARM64.EXE. *New* in XE8 | |
Availability | |||||||||
ALIGN_STACK | not defined | not defined | DEFINED | not defined | DEFINED | not defined | not defined | Defined in code that may be shared with the OS X compiler and another compiler on another platform such as Linux that does not have a rigid stack alignment requirement. For more information, see Eli Boling's blog at http://blogs.embarcadero.com/eboling/2009/05/20/5607 . *New* in XE2/OSX | |
ASSEMBLER | DEFINED | DEFINED | DEFINED | not defined | DEFINED | not defined | not defined | Assembler syntax is accepted. | |
AUTOREFCOUNT | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined for compilers that use automatic reference counting, such as the Delphi mobile compilers. *New* in XE4/iOS | |
EXTERNALLINKER | not defined | not defined | not defined | DEFINED | not defined | DEFINED | DEFINED | Defined for compilers that have an external linker and the LLVM code generator; the Delphi mobile compilers have the external ld linker and use LLVM as code generator. *New* in XE4/iOS | |
UNICODE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | UNICODE is defined as the default string type. | |
CONDITIONALEXPRESSIONS | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Tests for the use of the $IF directive. | |
ELF | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Defined when targeting Executable and Linkable Format (ELF) files. | |
NEXTGEN | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined for compilers (such as the Delphi mobile compilers) that use "next-generation" language features, such as 0-based strings. *New* in XE4/iOS | |
PC_MAPPED_EXCEPTIONS | not defined | not defined | DEFINED | not defined | DEFINED | not defined | not defined | Defined when compiling on a platform or for a target platform that uses address maps instead of stack frames to unwind exceptions (such as OS X). *New* in XE2. | |
PIC | never | never | DEFINED if -P is specified | never | DEFINED if -P is specified | always defined | never | Defined for platforms that require Position-Independent Code (PIC), such as OS X. | |
UNDERSCOREIMPORTNAME | DEFINED | not defined | DEFINED | not defined | DEFINED | not defined | not defined | Defined for compilers that add a leading underscore (for example, in names of dynamic libraries imported from Mac OS). *New* in XE4/iOS | |
WEAKREF | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined for compilers that can use weak references (the [weak] attribute). *New* in XE4/iOS | |
WEAKINSTREF | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined when weak references are defined for instances. *New* in XE4/iOS | |
WEAKINTFREF | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined when weak references are defined for interfaces. *New* in XE4/iOS |
In the table column heads:
- DCC32 is the 32-bit Windows Delphi compiler.
- DCC64 is the 64-bit Windows Delphi compiler.
- DCCOSX is the Mac OS X Delphi compiler.
- DCCIOSARM is the Delphi compiler for 32-bit iOS Devices.
- DCCIOS32 is the Delphi compiler for iOS Simulators.
- DCCAARM.EXE is the Delphi compiler for Android devices.
- DCCIOSARM64 is the Delphi compiler for 64-bit iOS devices.
For example, to determine the version of the compiler and run-time library that were used to compile your code, you can use {$IF}
with the CompilerVersion, RTLVersion and other constants:
{$IFDEF CONDITIONALEXPRESSIONS} {$IF CompilerVersion >= 17.0} {$DEFINE HAS_INLINE} {$IFEND} {$IF RTLVersion >= 14.0} {$DEFINE HAS_ERROUTPUT} {$IFEND} {$ENDIF}
See the table of Compiler Versions for a list of version numbers associated with various released Delphi compilers.
출처 : http://docwiki.embarcadero.com/RADStudio/Seattle/en/Conditional_compilation_(Delphi)