Какие параметры GCC должны быть настроены так, чтобы GCC был как можно более строгим? (и я имею в виду как можно более строгий) Я пишу на C89 и хочу, чтобы мой код соответствовал требованиям ANSI/ISO.
Параметры GCC для строжайшего кода C?
Ответ 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; { ... }
Если вам повезет, вам не нужно будет об этом беспокоиться. Мне не повезло на работе, и я не могу использовать строгие прототипы, к большому огорчению, потому что вокруг слишком много неаккуратных указателей функций.
Смотрите также: Какой лучший инструмент командной строки для очистки кода
Ответ 2
Этот набор параметров довольно хорош:
-Wall -Wextra -ansi -pedantic
Вам нужно будет прочитать документацию, чтобы увидеть, есть ли какие-либо дополнительные предупреждения, оставшиеся без внимания этой комбинацией.
Вы должны быть предупреждены, что строгий C89 не содержит поддержки комментариев стиля //
, и есть некоторые довольно серьезные ограничения на количество значимых символов в именах объектов с внешней связью.