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