Answer from cs61c-ck (Allen Lee 16583554) for Question 1 Before compilation of the program, the C preprocessor scans through the actual code for preprocessor commands such as #define and #include. Its purposes include file inclusion, macro substitution, and conditional inclusion. Its main purpose is to make code appear cleaner/more readable - it simplifies programming, somewhat. The C preprocessor is like an interpreter of the code - its input is in C, and its output is in C. Thus, since it doesn't really do any compiling or changing C code to anything else, it belongs between "C program" and "Compiler" in the diagram. As K&R pointed out, it's a "separate first step in compilation".