Call cc -E, not cpp, this allows lint to be unaware of any machine-dependent defines that cc(1) may normally define. Change fork() to vfork() and exit() to _exit(). Reuse temporary file so that multiple files passed can be processed without problems.