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
link:pragma{outfilesuffix}#pragma_requires[#pragma requires] feature.
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;
};