Siempre use -Oo superior ( -O1, -O2, -Os, etc.). En el nivel de optimización predeterminado, gcc busca la velocidad de compilación y no hace suficiente análisis para advertir sobre cosas como variables unitarias.
Considere hacer una -Werrorpolítica, ya que las advertencias que no detienen la compilación tienden a ser ignoradas.
-Wall prácticamente enciende las advertencias que muy probablemente sean errores.
Las advertencias incluidas en -Wextratienden a marcar códigos comunes y legítimos. Pueden ser útiles para las revisiones de código (aunque los programas estilo pelusa encuentran que muchas más trampas son más flexibles), pero no los activaría para el desarrollo normal.
-Wfloat-equal es una buena idea si los desarrolladores del proyecto no están familiarizados con el punto flotante, y una mala idea si lo están.
-Winit-selfes útil; Me pregunto por qué no está incluido -Wuninitialized.
-Wpointer-arithes útil si tiene un código mayormente portátil con el que no funciona -pedantic.
-save-temps,-Wshadowy-fmudflapfueron los mejores hallazgos que no conocía, gracias a todos.