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