-Wall Включает много разных полезных предупреждений о потенциальных ошибках в программе. Некоторые предупреждения не включаются с помощью этой опции, и их нужно указывать дополнительно.
-Werror Превращает предупреждения в сообщения об ошибках. В обычном режиме предупреждения не приводят к завершению компиляции, и получившуюся программу можно будет запустить. В режиме, устанавливаемом этой опцией, все предупреждения считаются как ошибки компиляции.
-Wformat-security Включает дополнительные проверки функций семейства printf и scanf (запрещается потенциально опасное использование этих функций).
-Wignored-qualifiers Запрещает “бессмысленное” использование квалификаторов const в типе возвращаемого значения, например, такое:
const int foo(void);
-Winit-self Запрещает бессмысленные конструкции вида:
int a = a;
-Wswitch-default Требует, чтобы в каждом операторе switch присутствовал вариант default:
-Wfloat-equal Запрещает использование операций == и != для вещественных значений.
-Wpointer-arith Запрещает арифметические операции с типом void*.
-Wtype-limits Запрещает операции сравнения, которые дают известный результат из-за ограниченного диапазона типа. Например, операция a >= 0 всегда дает значение “истина”, если переменная a имеет беззнаковый тип.
-Wempty-body Запрещает пустое тело у операторов if и других. Например,
if (a > 0);
-Wno-logical-op Разрешает потенциально неправильные логические операции (например, когда логическая операция может быть перепутана с побитовой операцией).
-Wstrict-prototypes Запрещает определение функций без указания типов аргументов.
-Wold-style-declaration Запрещает устаревший стиль определения функций и переменных.
-Wold-style-definition Запрещает устаревший стиль описания функций.
-Wmissing-parameter-type Запрещает устаревший стиль описания функций.
-Wmissing-field-initializers Требует инициализации всех полей структур, если структура вообще инициализируется.
-Wnested-externs Запрещает описание extern-переменных внутри функций.
-Wno-pointer-sign Разрешает использовать в качестве аргумента указатель, знаковость типа которого отличается от знаковости типа параметра, то есть, например, передавать указатель типа unsigned char* в функцию, требующую параметра типа char*.
-std=gnu99 Включает поддержку стандарта C99 и некоторых его расширений.