Ответ 1
Я бы рекомендовал использовать:
-Wall -Wextra -std=c89 -pedantic -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition
Вы должны скомпилировать с -O
, а также -g
, поскольку некоторые предупреждения доступны только при использовании оптимизатора (на самом деле я обычно использую -O3
для определения проблем). Вы можете предпочесть -std=gnu89
, поскольку это отключает меньшее количество расширений в библиотеках. OTOH, если вы кодируете строгий ANSI C89, возможно, вы хотите, чтобы они были отключены. Параметр -ansi
эквивалентен -std=c89
, но не совсем явный или гибкий.
Пропущенные прототипы предупреждают вас о функциях, которые используются (или о внешних функциях) без прототипа в области видимости. Строгие прототипы означают, что вы не можете использовать "пустые круглые скобки" для деклараций или определений функций (или указателей функций); вам нужен либо (void)
, либо правильный список аргументов. Определение старого стиля определяет определения функции стиля K & R, такие как:
int old_style(a, b) int a; double b; { ... }
Если вам повезет, вам не нужно будет об этом беспокоиться. Мне не повезло на работе, и я не могу использовать строгие прототипы, к большому огорчению, потому что вокруг слишком много неаккуратных указателей функций.
Смотрите также: Какой лучший инструмент командной строки для очистки кода