[Home]
[Search]
[CTG]
[RTL]
[IDDE]
Last update Nov 30, 2003
Predefined Macros
Numerous macros are predefined by the compiler, enabling
detailed control for conditional compilation.
Names without a leading _ will not be defined if the -A switch
is used. New code should use the leading _ version.
By "defined", a macro is defined and set to 1.
- _MSDOS, MSDOS
- MSDOS target. Defined for all cases where __OS2__ or
_WIN32 are not defined.
- __OS2__
- OS/2 target. Defined for -mf.
- WIN32,_WIN32
- WIN32 target (NT, Windows 95 or Win32s).
Defined for -mn.
- DOS386
- 32 bit extended DOS target. Defined for -mx or -mp.
- DOS16RM
- 16 bit extended DOS target. Defined for -mr or -mz.
- M_I86, _M_I86
- Always defined.
- _M_I86TM, M_I86TM
- Tiny memory model. Defined for -mt.
- _M_I86SM, M_I86SM
- Small memory model. Defined for -ms, -mx,
-mp, -mf or -mn.
- _M_I86MM, M_I86MM
- Medium memory model. Defined for -mm.
- _M_I86CM, M_I86CM
- Compact memory model. Defined for -mc.
- _M_I86LM, M_I86LM
- Large memory model. Defined for -ml, -mr or -mz.
- _M_I86VM, M_I86VM
- VCM memory model. Defined for -mv.
- _M_I8086, M_I8086
- 8088 is target. Defined for -0 or default
for -mt, -ms, -mm, -mc, -ml, or -mv.
- _M_I286, M_I286
- 80286 or better is target.
Defined for -2, -3,
-4, -5. Default for -mr, -mz, -mx, -mp,
-mf, -mo.
- _M_IX86
- Defined for 32 bit targets. Set to:
300 for 386 targets,
400 for 486,
500 for Pentium,
600 for P6.
- __DMC__
- Always defined. Set to version number:
0x700 for version 7.0,
0x720 for 7.2,
0x800 for 8.0.
- __DMC_VERSION_STRING__
- Expands to a string identifying the compiler, such
as "Digital Mars C/C++ 8.32.2".
- _CHAR_UNSIGNED
- Chars are unsigned. Defined for -J.
- _CHAR_EQ_UCHAR
- chars and unsigned chars are same type.
Defined for -Ju.
- _DEBUG_TRACE
- Set to 1 when -gt is set.
- _DLL
- Set to 1 when -ND is set. Means that the DLL RTL
will be used rather than the statically
linked in RTL.
- _ENABLE_ARRAYNEW
- Set to 1 when -Aa is set.
- _BOOL_DEFINED
- Set to 1 for -Ab (enable bool keyword).
- _WCHAR_T_DEFINED
- Set to 1 for -Aw (enable wchar_t keyword).
- _CPPRTTI
- Set to 1 for -Ar (enable RTTI).
- _CPPUNWIND
- Set to 1 for -Ae (enable C++ exception handling).
- _MD
- Set to 1 when -ND is set. Means that the app
will be multi-thread aware.
- _PUSHPOP_SUPPORTED
- Set to 1. Used to indicate #pragma pack(push) and
#pragma pack(pop) are supported.
- _STDCALL_SUPPORTED
- Set to 1. Used to indicate that the __stdcall and
__cdecl keywords are supported.
- __INTSIZE
- Always defined. Set to size of int (2 for 16 bit
models, 4 for 32 bit models).
This macro is equivalent to sizeof(int) except that it can be
used in preprocessor expressions. It is most useful for distinguishing
between 16-and 32-bit compilations. For example:
#if __INTSIZE == 2
// 16-bit version
#elseif __INTSIZE == 4
// 32-bit version
#else
#error Unsupported int size
#endif
- __DEFALIGN
- Always defined. Set to default struct member
alignment for memory model. Not affected by
-a compiler switch or align or pack pragmas.
It is affected by the memory model. It has
a value of 2 for 16-bit memory models, 4 for DOSX,
and 8 for Win32.
It is useful for ensuring that structures in
header files are laid out in a manner consistent
with their corresponding
compiled library. For example:
#pragma pack(__DEFALIGN) // to default alignment
struct ABC {...}; // lay out structure
#pragma pack() // return to previous alignment
- _INTEGRAL_MAX_BITS
- Set to 32 for 16 bit memory models, 64 for 32 bit
memory models. It specifies the maximum
number of bits in the largest integral type.
(32 bit memory models support the long long
64 bit integral type.)
- _WINDOWS
- Generating Windows program. Defined for -W[123AD].
- _WINDLL
- Generating Windows DLL. Defined for -WD.
- __INLINE_8087
- Defined if generating inline math coprocessor code.
- __I86__
- Always defined. Set to target CPU (0 == 8088,
2 == 286, 3 == 386, 4 == 486, 5 == P5,
6 == P6).
- __SMALL__
- Defined if -mt, -ms, -mx, -mp, -mf, -mn.
- __MEDIUM__
- Defined if -mm.
- __COMPACT__
- Defined if -mc.
- __LARGE__
- Defined if -ml, -mz, -mr.
- __VCM__
- Defined if -mv.
- __FPCE__
- Always defined. Indicates NCEG conformance.
- __FPCE__IEEE__
- Indicates IEEE 754 conformance. Defined by default,
not defined for -ff.
- DEBUG
- Defined for -D. Not affected by -A.
- __BASE_FILE__
- Source file name as specified on the command line.
- __FUNCTION__
- Same as __FUNC__.
Provided for Gnu CC compatibility.
- __PRETTY_FUNCTION__
- Same as __FUNC__, but pretty-printed (C++ functions
become more readable).
Provided for Gnu CC compatibility.
- __TIMESTAMP__
- Always defined. Set to compilation time in the
form "Ddd Mmm dd hh:mm:ss yyyy".
C99 Predefined Macros
Defined per the C99 Standard 6.10.8 when compiling C programs.
- __DATE__
- Always defined. Set to compilation date in the
form "Mmm dd yyyy".
- __FILE__
- Always defined. Set to name of file being compiled
enclosed in "".
- __LINE__
- Always defined. Set to current line of source file.
- __STDC__
- C standard conformance.
Defined for -A, -A89, -A90, -A94,
-A95, -A99 and set to 1.
- __STDC_HOSTED__
- Always defined and set to 0.
- __STDC_VERSION__
- Always defined (unless switch -A89 or -A90) and
set to 19990L (199409L for
switch -A94 or -A95).
- __TIME__
- Always defined. Set to compilation time in the
form "hh:mm:ss".
- __STDC_IEC_559__
- IEC 60559 floating point arithmetic conformance.
Defined if -ff (fast floating point) is not set.
If defined, then set to 1.
- __STDC_IEC_559_COMPLEX__
- IEC 60559 complex floating point arithmetic conformance.
Defined if -ff (fast floating point) is not set.
If defined, then set to 1.
- __STDC_ISO_10646__
- Not defined.
C++98 Predefined Macros
Defined per the C++98 Standard 16.8-1 when compiling C++
programs (.cpp file extension or -cpp switch).
- __LINE__
- Always defined. Set to current line of source file.
- __FILE__
- Always defined. Set to name of file being compiled
enclosed in "".
- __DATE__
- Always defined. Set to compilation date in the
form "Mmm dd yyyy".
- __TIME__
- Always defined. Set to compilation time in the
form "hh:mm:ss".
- __STDC__
- C++98 conformance. Defined for -A and set to 1.
- __cplusplus
- Always defined and set to 199711L.
Obsolete Predefined Macros
These are retained for backwards compatibility. They should not be
used in new code.
- __FUNC__
- Always defined. Expands to the name of the function.
The name appears enclosed in "".
Expands to "" outside of a function.
Obsolete per C99 6.4.2.2; use __func__ instead.
- __NT__
- Windows NT or Win32s target. Defined for -mn.
Obsolete - use _WIN32 instead.
- __SC__
- Always defined. Set to same value as __DMC__.
Obsolete - use __DMC__ instead.
- __ZTC__
- Always defined. Set to same value as __DMC__.
Obsolete - use __DMC__ instead.
Copyright © 1995-2001 Digital Mars. All Rights Reserved.