custom c preprocessor