When running gcc(1), -Wall is the CommandLine option that enables all warnings. Generally the first thing people will look for when debugging or helping others with C/C++ code is that it compiles with -Wall.

-Wall warns about a great many things which are normally harmless in normal circumstances but can be dangerous at others. -pedantic also warns against things that are technically wrong but cannot lead to problems for gcc(1) and -pedantic-errors issues errors for such quibbles. -pedantic and -pedantic-errors are not usually used unless the code is being written with the intention of porting it to exotic hardware, as a last ditch attempt to find an elusive bug or as a method of evaluating the quality of code (StuartYeates always uses these flags when marking C/C++ assignments).

It is often a good idea to add -Wall to your CFLAGS environment variable. The second thing to do after adding -Wall is to add -g so you can get debugging symbols when your program crashes. Unlike -Wall, -g can effect the RunTime performance of the generated programs so is not recommended when building core system components on a production system.

Many programmers have a line similar to

export CFLAGS="-Wall -g"

in their .profile.