www.digitalmars.com [Home] [Search] [CTG] [RTL] [IDDE]

Last update Dec 14, 2002


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.

__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__

C99 conformance. Defined for -A and set to 1.

__STDC_HOSTED__

Always defined and set to 0.

__STDC_VERSION__

Always defined and set to 19990L.

__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.