Preprocessing
A dotgen specification consists of one or more files that are preprocessed. The preprocessing is controlled by directives introduced by lines having # as the first character other than white space. C comments are also recognized (both /* ... */ and // styles), and their use strongly encouraged. Preprocessor directives are independent of the dotgen language and not entirely described in this document. See The C preprocessor for a comprehensive documentation.
The primary use of the preprocessing facility is to include definitions (#include) from other dotgen specifications or enable conditional definitions (#if or #ifdef). Directives may appear anywhere in the source file but are not seen nor interpreted by genom. For instance, text in files included with a #include directive is treated as if it appeared in the including file. However, some preprocessor #pragma directives are interpreted by genom (see Pragmas). Abuse of advanced C preprocessor features (like complex macros or stringification) is strongly discouraged.
The C preprocessor used by genom is pcpp from the pcc project (http://pcc.ludd.ltu.se/). It is invoked as a separate process from libexec/genom-pcpp by default. This can be changed by setting the environement variable GENOM_CPP, see Environment variables. However, note that if you change the default, you will loose some of the functionalities provided by genom-pcpp, like the #pragma requires feature.
Example
This illustrates the use of the most common #ifdef, #include and /* ... */ directives.
#ifndef TYPEDEFS_GEN #define TYPEDEFS_GEN typedef long integer_value; #endif /* TYPEDEFS_GEN */
#include "typedefs.gen" /* define a new type */ struct record { integer_value v; };