www.digitalmars.com Home | Search | CTG | RTL | IDDE | STL
Last update Sat Apr 8 23:54:06 2006
Compiler & Tools Guide

Compiling
Compiling Code
C Implementation
C++ Implementation
Language Extensions
Mixing Languages
Assembly Language
Inline Assembler
Optimizing Code
Numerics Programming
Regular Expressions
Acrtused
Pragmas
Precompiled Headers
Predefined Macros
Warning Messages
Error Messages
Runtime Messages


Linking
Optlink
Switches
Module Definition Files
Operation and Design
Error Messages


Win32 Programming
Win32 Programming


DOS and Win16
Programming

Memory Models
16 Bit Pointer Types
and Type Modifiers

Handle Pointers
DOS
DOS 32 (DOSX)
Win16
Win16 DLLs
Win16 Prolog/Epilog


C/C++ Extensions
Contract Programming
__debug statement
__debug declaration
Dynamic Profiling
Embedding C in HTML


Tools
BCC
CHMOD
CL
COFF2OMF
COFFIMPLIB
DMC
DIFF
DIFFDIR
DUMP
DUMPOBJ
DUMPEXE
EXE2BIN
FLPYIMG
GREP
HC
IMPLIB
LIB
LIBUNRES
MAKE
MAKEDEP
ME
OBJ2ASM
PATCHOBJ
RC
RCC
SC
SHELL
SMAKE
TOUCH
UNMANGLE
WHEREIS


Porting to DMC++
Switching to DMC++
from Microsoft
from Borland
Porting Guide


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.