Challenge 1: Building the Three-File Project Manually — Possible Solution ==================================================================== math_utils.h: #ifndef MATH_UTILS_H #define MATH_UTILS_H int add(int a, int b); #endif math_utils.c: #include "math_utils.h" int add(int a, int b) { return a + b; } main.c: #include #include "math_utils.h" int main() { printf("%d\n", add(2, 3)); return 0; } Build commands: $ gcc -c math_utils.c -o math_utils.o $ gcc -c main.c -o main.o $ gcc math_utils.o main.o -o program $ ./program Output: 5 WHY THIS WORKS AS AN ANSWER ------------------------------ Each .c file is compiled independently into its own .o file first (neither compile step needs the other file to exist yet, since the header alone provides add's declaration), and only the final command combines both object files into one executable -- exactly the compile-then-link separation the chapter demonstrates, with the header guard (Chapter 4) included as good practice even though this specific example never includes math_utils.h twice.