What are the useful GCC flags for C?

c, compiler-flags, gcc

Solution

Several of the `-f` code generation options are interesting:

`-fverbose-asm` is useful if you're compiling with `-S` to examine the assembly output - it adds some informative comments.

`-finstrument-functions` adds code to call user-supplied profiling functions at every function entry and exit point.

`--coverage` instruments the branches and calls in the program and creates a coverage notes file, so that when the program is run coverage data is produced that can be formatted by the `gcov` program to help analysing test coverage.

`-fsanitize={address``,``thread``,``undefined``}` enables the AddressSanitizer, ThreadSanitizer and UndefinedBehaviorSanitizer code sanitizers, respectively. These instrument the program to check for various sorts of errors at runtime.

Previously this answer also mentioned `-ftrapv`, however this functionality has been superseded by `-fsanitize=signed-integer-overflow` which is one of the sanitizers enabled by `-fsanitize=undefined`.

Problem

Beyond setting `-Wall`, and setting `-std=XXX`, what other really useful, but less known compiler flags are there for use in C? I'm particularly interested in any additional warnings, and/or and turning warnings into errors in some cases to absolutely minimize any accidental type mismatches.

Original source

Related problems