Challenge 2: A Header Guard, and What Breaks Without One — Possible Solution ==================================================================== point.h: #ifndef POINT_H #define POINT_H typedef struct { int x; int y; } Point; #endif Using it (deliberately including it twice from the same file, to demonstrate the guard working): main.c: #include "point.h" #include "point.h" // included again -- the guard prevents a problem int main() { Point p = {1, 2}; return 0; } With the guard in place, this compiles fine: the first #include pastes point.h's contents and defines POINT_H; the second #include's #ifndef POINT_H check sees POINT_H is already defined and skips pasting the contents a second time entirely. What would happen WITHOUT the guard (removing #ifndef/#define/#endif entirely): both #include lines would paste the full typedef struct {...} Point; definition into main.c, verbatim, twice. The compiler would then see Point defined twice in the same translation unit, producing a "redefinition of typedef 'Point'" compile error (the exact category of error the chapter names -- "duplicate definitions... a real compile error") -- the program would fail to compile at all, not merely produce a warning. WHY THIS WORKS AS AN ANSWER ------------------------------ This demonstrates the guard actually preventing the duplicate-paste scenario (two #include lines, one working correctly), and explains precisely what error the compiler produces without the guard (duplicate struct/typedef definition, a compile error) rather than a vague "it breaks."