Header files (.h) declare interfaces; source files (.c) implement them. The linker combines compiled objects and libraries into one executable.
Splitting code
/* math_utils.h */
int add(int a, int b);
/* math_utils.c */
int add(int a, int b) { return a + b; }
main.c includes the header; compile both files and link together locally.
Static libraries
ar archives .o files into .a libraries. Shared libraries (.so, .dylib, .dll) load at runtime.
Important interview questions and answers
- Q: Header vs source?
A: Headers expose declarations; sources hold definitions the linker needs exactly once. - Q: What does the linker do?
A: Resolves symbols across object files and libraries into a final executable.
Self-check
- Why use include guards?
- What file extension holds object code before linking?
Interview prep
- Header vs implementation?
Headers declare interfaces;
.cfiles define functions the linker needs exactly once.- Linker role?
Combines object files and libraries, resolving symbol references into a final executable.