For completeness sake: If you are interested in running just the preprocessor, you can also use cpp:
cpp foo.c
See https://gcc.gnu.org/onlinedocs/cpp/Invocation.html for reference:
Most often when you use the C preprocessor you do not have to invoke it explicitly: the C compiler does so automatically. However, the preprocessor is sometimes useful on its own. You can invoke the preprocessor either with the cpp command, or via gcc -E. In GCC, the preprocessor is actually integrated with the compiler rather than a separate program, and both of these commands invoke GCC and tell it to stop after the preprocessing phase.
The cpp command expects two file names as arguments, infile and outfile. The preprocessor reads infile together with any other files it specifies with ‘#include’. All the output generated by the combined input files is written in outfile.
#includes at the top of the file (so prepare for a lot of scrolling).