Всегда используйте -Oили выше ( -O1, -O2, -Osи т.д.). На уровне оптимизации по умолчанию gcc использует скорость компиляции и не проводит достаточного анализа, чтобы предупредить о таких вещах, как унифицированные переменные.
Рассмотрите возможность разработки -Werrorполитики, поскольку предупреждения, которые не останавливают компиляцию, обычно игнорируются.
-Wall в значительной степени включает предупреждения, которые, скорее всего, будут ошибками.
Предупреждения, включенные в, -Wextraимеют тенденцию помечать общий, законный код. Они могут быть полезны для рецензирования кода (хотя программы в стиле lint находят гораздо больше ловушек более гибкими), но я бы не стал их включать для нормальной разработки.
-Wfloat-equal хорошая идея, если разработчики проекта не знакомы с плавающей запятой, и плохая идея, если они есть.
-Winit-selfявляется полезным; Интересно, почему это не входит в -Wuninitialized.
-Wpointer-arithполезно, если у вас есть в основном переносимый код, с которым не работает -pedantic.
-save-temps,-Wshadowи-fmudflapбыли величайшими находками, о которых я не знал, спасибо всем.