"Enable most warnings. According to GCC's man page,
"This enables all the warnings about constructions that some
users consider questionable, and that are easy to avoid (or modify
to prevent the warning), even in conjunction with macros."
"Note that as of version 4.3.3, two of the most powerful
features enabled by -Wall, warnings about uninitialized variables
use and out of bounds array checking will only work if you specify
an optimization level (-O1 for uninitialized variables, -O2 for
array bounds checking). This is planned to change in future GCC
versions. It is generally suggested that all your programs are
compiled with the -Wall option enabled. My suggestion is to also
compile your program with -O2 to let GCC test for uninitialized
variables and out of bounds array use; turn it off afterwards if
you wish to have full access to debuging info.
"Warn about shadow variables. Shadow variables (i.e. variables
declared inside an inner block with the same name as a variable
already existing in the scope) are valid in C/C++, but they are
quite error prone. You should avoid using them; this compiler
option will help you track unintended use."