www.digitalmars.com Home | Search | CTG | RTL | IDDE | STL
Last update Sat Apr 8 23:54:05 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


C Language Implementation

The C language standard (C99) is:
"Programming Languages - C", ANSI/ISO/IEC 9899-1999

Preprocessor

File naming conventions

Digital Mars C++ uses the following naming conventions for file extensions. To avoid confusion, do not use these extensions with other file types.
Extension File types
.c C source files
.h C header files
.cpp C++ source files
.h C++ header files
.obj Object files
For more information on how the compiler processes files, see "Compiling Code."

Note: For compatibility with other compilers, .cxx, .hpp, and .hxx are also valid extensions for C++ source and header files for the compiler. These extensions have fallen out of favor and should not be used in the future.

Header Files

The two ways to write #include statements are used to tell the preprocessor where to look for the source file.

With an include statement in the form,

#include <filename> 
the preprocessor searches for filename along the list of paths specified by the -I option. If not found, the search continues along the list of paths specified by the INCLUDE environment variable. This type of include statement is used for system include files. Alternatively, with an include statement of the form,
#include "filename" 
the preprocessor searches for filename in the default directory. If the file is not found, the compiler searches for filename as if it had been enclosed in angle brackets (<>). This type of include statement is for user include files.

With either type of include statement, if the file extension is .hpp, and if the preprocessor can't find the file, it repeats the search using the file extension .h.

The compiler treats character strings between double quotes ("") or <> pairs as a file name. This allows you to use almost any character, including spaces, the single ('), the backslash (\), or the sequences slash-apostrophe (/*) or double slash (//) in a file name. The compiler does not allow the new-line character to appear between the file name delimiters.

Notice that the backslash character is not used as an escape character in include path strings. Instead, backslash has the same meaning as it does on the command line, denoting a subdirectory of the current directory. For example,

#include <sys\stat.h> 
tells the preprocessor to look for stat.h in the sys subdirectory, which is the focus of current search.

The compiler ignores case in file names and accepts pathnames of any length up to the maximum allowed by the operating system.

To create an include path list, use either the command line option, -I, or the environment variable, INCLUDE. In both cases, the list consists of one or more pathnames separated by semicolons. The compiler first checks paths that are specified on the command line, and then the paths in INCLUDE. Pathnames are typically absolute paths, but you can use relative pathnames as well. If you specify a relative pathname, it is considered relative to the same directory as the enclosing file.

There is no compiler limit on the number of nested #include directives or the number #include paths. The practical limit is the amount of memory available to the compiler or to the operating system.

Predefined names

If the -A compiler option is specified, the predefined name __STDC__ is defined with the value 1.

Unimplemented Features

While Digital Mars C strives to be fully compatible with C99, some features remain unimplemented, for example:
  • tgmath.h
  • _Pragma

C Extensions

Auto Prototyping

Generate prototypes for functions based on how they are used, described here.