The output of man gcc
contains this little snippet:
-D name
Predefine name
as a macro, with definition 1.
-D name=definition
The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define
directive. In particular, the definition will be truncated by embedded newline characters.
If you are invoking the preprocessor from a shell or shell-like program you may need to use the shell's quoting syntax to protect characters such as spaces that have a meaning in the shell syntax.
If you wish to define a function-like macro on the command line, write its argument list with surrounding parentheses before the equals sign (if any). Parentheses are meaningful to most shells, so you will need to quote the option. With sh
and csh
, -D'name(args...)=definition'
works.
-D
and -U
options are processed in the order they are given on the command line. All -imacros
file and -include
file options are processed after all -D
and -U
options.
So, the option -DUMP_TO_FILE
is equivalent to putting the line #define UMP_TO_FILE 1
in your source code (there are subtle differences but there's no need to cover them here).
As an aside, I consider this rather bad practice. The author is performing trickery so that it looks like a compiler option DUMP_TO_FILE
rather than a pre-processor macro. That's sort of clever but it's going to cause trouble for anyone looking at the source wondering what UMP_TO_FILE
actually means.
Personally, I'd rather see -DDUMP_TO_FILE
and #ifdef DUMP_TO_FILE
since it's much clearer in intent.