What are conditional compilation directives ?
They are : #ifdef, #ifndef, #else and #endif.
#ifdef
Compile a section of code if an identifier is defined.
Syntax :
#ifdef <identifier> <statements>... [#else] <statements>... #endif
Arguments :
<identifier> is the name of a definition whose existence is being verified.
Description :
#ifdef…#endif lets you perform a conditional compilation. It does this by identifying a section of source code to be compiled if the specified <identifier> is defined. The <identifier> can be defined using either the #define directive or the /D compiler option which lets you define an identifier or manifest constant from the compiler command line.
The #else directive specifies the code to compile if <identifier> is undefined. The #endif terminates the conditional compilation block.
Conditional compilation is particularly useful when maintaining many different versions of the same program. For example, the demo code and full system code could be included in the same program file and controlled by a single #define statement.
Examples :
. This code fragment is a general skeleton for conditional compilation with #ifdef:
#define DEMO . . <statements> . #ifdef DEMO <demo specific statements> #endif
. This example controls conditional compilation with an identifier defined on the compiler command line with the /D option.
In the program (.prg) file:
#ifdef DEBUG Assert(<some condition>) #endif
. This example defines a manifest constant to one value if it does not exist and redefines it to another if it exists:
#ifdef M_MARGIN #undef M_MARGIN #define M_MARGIN 15 #else #define M_MARGIN 10 #endif
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ifndef
Compile a section of code if an identifier is undefined
Syntax :
#ifndef <identifier> <statements>... [#else] <statements>... #endif
Arguments :
<identifier> is the name of a definition whose absence is being verified.
Description :
#ifndef…#endif lets you perform conditional compilation by identifying a section of source code to compile if the specified <identifier> is undefined.
The #else directive specifies the code to compile if <identifier> is defined. The #endif terminates the conditional compilation block.
Examples :
. This code fragment is a general skeleton for conditional compilation with #ifndef:
#define DEBUG . . <statements> . #ifndef DEBUG <optimized version of code> #else <debugging version of code> #endif
. This example compiles a section of code if a specific identifier is undefined.
In the program (.prg) file:
#ifndef NODEBUG Assert(<some condition>) #endif
. This example overrides a default definition in the program (.prg) file using a manifest constant defined on the compiler command line with the /D option
In the program (.prg) file:
#ifndef M_MARGIN #define M_MARGIN 15 #endif