code: def do_preprocess(defn):
      
      from pycparser.ply import lex, cpp
      lexer = lex.lex(cpp)
      p = cpp.Preprocessor(lexer)
      # p.add_path(dir) will add dir to the include search path
      p.parse(defn)
      return ''.join(tok.value for tok in p.parser if tok.type not in p.ignore)
docs: Run a string through the C preprocessor that ships with pycparser but is weirdly inaccessible?