DoxyPress
1.7.0
|
Source files which are used as input to DoxyPress can be parsed by the built in preprocessor. By default DoxyPress only partially preprocesses defines and macros. The preprocessor evaluates conditional compilation statements and macro definitions, however it does not perform macro expansion.
As an example, suppose the following fragment exists in a source file.
#define VERSION 200 #define CONST_STRING const char * #if VERSION >= 200 static CONST_STRING version = "2.xx"; #else static CONST_STRING version = "1.xx"; #endif
By default DoxyPress will parse the following lines.
#define VERSION #define CONST_STRING static CONST_STRING version = "2.xx";
In this example DoxyPress will read both statements.
#define VERSION #define CONST_STRING static CONST_STRING version = "2.xx"; static CONST_STRING version = "1.xx";
To expand the CONST_STRING
macro, the macro-expansion tag in the project file must be enabled. Then the result after preprocessing would be as follows.
#define VERSION #define CONST_STRING static const char * version = "2.xx";
DoxyPress expands all macro definitions (recursively if needed) which is often not desired. In order to limit which macro expansions occur, set the expand-only-predefined tag to YES
and list the macros definitions to be expanded in the predefined-macros tag or the macro names in the expand-as-defined tag.
As an example, this feature is useful to hide non standard syntax from the DoxyPress parser. In the following declaration __declspec(dllexport)
is required by Windows to export this function. If this syntax is visible to the DoxyPress parser, it will read this line as a declaration of a function named __declspec, which is not what the source code means.
void __declspec(dllexport) ErrorMsg(String aMessage, ...);
The following tag settings will result in this syntax being removed during preprocessing in DoxyPress.
ENABLE-PREPROCESSING = YES MACRO-EXPANSION = YES EXPAND-ONLY-PREDEFINED = YES PREDEFINED-MACROS = __declspec(x)=
Preprocessor definitions which are normally defined by your compiler are not available to DoxyPress. Macros like __cplusplus
may need to be defined in your project file.
ENABLE-PREPROCESSING = YES MACRO-EXPANSION = YES PREDEFINED-MACROS = __cplusplus=, _MSC_VER=1914, __GNUC__=7
In some cases it may be necessary to expand only one level of macro expansion and not expand it recursively. To do this, use a "colon equal" operator instead of an "equal" operator in the PREDEFINED-MACROS
tag.
As an example suppose we have the following source in a header file.
#define MyClass internal_MyClass class internal_MyClass;
If the equal operator is used in the predefined macro expansion, the output might look something like the following, which is not not the desired result.
class internal_internal_internal_...
To avoid this recursive problem use the following syntax in your project file.
ENABLE-PREPROCESSING = YES MACRO-EXPANSION = YES PREDEFINED-MACROS = MyClass:=internal_MyClass
To add more flexibility to the DoxyPress preprocessor you can write an input filter and specify the path to your filter in the filter-program tag.