These are my favourite gcc warning flags. The -O is required to activate the -Wuninitialized, but the -O of course makes debugging a bit more inconvenient. -Wall -O -W -Waggregate-return -Wbad-function-cast -Wcast-align -Wcast-qual -Wconversion -Wc++-compat -Wdisabled-optimization -Wendif-labels -Wformat=2 -Wlarger-than-256 -Wmissing-declarations -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wmissing-noreturn -Wnested-externs -Wpointer-arith -Wredundant-decls -Wshadow -Wshorten-64-to-32 -Wsign-compare -Wstrict-prototypes -Wwrite-strings -Wdeclaration-after-statement (gcc 3.4+) -ansi -pedantic for extra pain (but does not work in Solaris) -std=c89 for extra strictness (but does not work in e.g. HP-UX) -Wtraditional portability differences with pre-ANSI compilers -Wfloat-equal sometimes (when feeling extra cranky)