Pour avoir un mode vraiment parano de gcc, j'utilise splint. C'est un analyseur static de code qui peut être un peu soupe au lait si tu le lui demande. Par exemple, voici un bout de Makefile (la mise en page va être détruite) :
CC = gcc
CPPFLAGS =
CFLAGS = -std=c99 -pedantic-errors -Wall -Wextra -Werror -g -O3
LINT = splint
LINTFLAGS = +iso-lib +expect 0 +strict -sizeof-type +iso99-limits
SED = sed
TOUCH = touch
%.o: %.c %.ok
$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
%.ok: %.inc
$(LINT) $(CPPFLAGS) $(LINTFLAGS) $*.c
$(TOUCH) $@
%.inc: %.c
$(CC) -MM $(CPPFLAGS) -MF $@ $<
$(SED) 's,\($*\)\.o[ :]*,\1.o $@ : ,g' -i $@
Avec ça, gcc ne compile un fichier que si splint a d'abord dit que le fichier était OK (et les options là le rende vraiment paranoïaque). Tu peux négliger la partie *.inc" c'est juste pour gérer les dépendance de compilation.
Je ne suis pas sûr qu'il y a beaucoup de programme qui peuvent être compilé comme ça cependant.