Functional programming for the C preprocessor