reindent print_macro_definition
set the context block for parsing an expression
write macros to the generated source

This writes macro definitions to the generated source file.
Note that the logic to skip built-in defines doesn't really
work, I think due to a gcc bug.