Headers and Makefiles
Challenge Gallery
Quick Reference
Header file template:
#ifndef MYLIB_H
#define MYLIB_H
// Function prototypes
int compute(int x, int y);
void display(const char *msg);
#endif
Makefile template:
CC = gcc
CFLAGS = -Wall -Wextra -std=c11
prog: main.o utils.o
$(CC) $(CFLAGS) -o prog main.o utils.o
main.o: main.c utils.h
$(CC) $(CFLAGS) -c main.c
utils.o: utils.c utils.h
$(CC) $(CFLAGS) -c utils.c
.PHONY: clean
clean:
rm -f *.o prog
Common Pitfalls
- Spaces instead of tabs – Makefile recipes require tab indentation. Spaces cause cryptic errors.
- Missing include guards – Without guards, including a header twice causes redefinition errors.
- Definitions in headers – Put only declarations in .h files. Definitions in headers cause multiple definition errors when linked.
- Circular includes – A.h includes B.h which includes A.h. Include guards prevent infinite recursion but can cause missing declarations.