BUILD a program * Preprocessor - normal C to messy C - Handle #define #ifdef/#endif #include * Compiler - messy C (▒.c) → object code (▒.o) - one file at a time - does not check for function «definition» (body); only function «declaration» (sig.) * Linker - many object files (▒.o) → executable - connect function calls with the corresponding function definitions BUILDING a program can take a very long time. PROBLEM: If there is an error, you don't want to restart from the beginning. SOLUTION: Make (or other build automation technologies) ──────────────────────────────────────────────────────────── D.R.Y. Rule - "Don't Repeat Yourself" ‾ ‾ ‾ ──────────────────────────────────────────────────────────── CODE COVERAGE Q: How do I know if my tests are adequate? A: There is no way to know for sure, but we have tools to give us hints. Line coverage tells us if every line in our implementation file is executed when we run our tests.