Параметры GCC для принудительной проверки стандарта Ansi C?
Вопрос
Какие параметры gcc я должен использовать для принудительного выполнения предупреждений / ошибок ANSI C (C99)?gcc (ССАГПЗ) 3.4.2 (mingw-специальный)
Я использую:gcc -pedantic -ansi -std=c99 правильно ли это?
Решение
Флаг -ansi
является синонимом флага -std = c89
. Р>
Достаточно просто использовать -std = c99
с -pedantic
.
В случае сомнений вы всегда можете обратиться к документации GCC . Начиная с GCC 3.4.2, глава для чтения - 2 - Стандарты языка, поддерживаемые GCC .
Другие советы
Это старый вопрос, но я просто хотел добавить несколько дополнительных моментов.
Во-первых, независимо от набора общих параметров командной строки, которые вы предоставляете GCC, в настоящее время, похоже, невозможно заставить GCC сообщать обо всех нарушения ограничений как "ошибки", а все остальное как "предупреждения".Некоторые из диагностических сообщений, которые GCC сообщает как "предупреждения", на самом деле являются нарушения ограничений (т.е."ошибки") с точки зрения языка C, но нет способа заставить GCC распознать этот факт и сгенерировать диагностику "ошибки".Вполне возможно, что более точного разделения можно добиться путем тонкой настройки отдельных типов предупреждений, но я не уверен, что настройки GCC обеспечивают достаточную детализацию для достижения хорошего соответствия.
Во-вторых, GCC обеспечивает -pedantic-errors
вариант, который может быть использован вместо обычного -pedantic
, который предназначен для обеспечения более точной (как описано выше) классификации диагностических сообщений на "ошибки" и "предупреждения".Однако он все еще не идеален.
P.S.Спецификация языка не требует / определяет разделение диагностических сообщений на "ошибки" и "предупреждения", но на практике многие программисты ожидают, что о нарушениях ограничений будет сообщаться как об "ошибках".Я подумал, что вы, возможно, имели в виду что-то подобное, когда упомянули в своем вопросе "принудительное применение предупреждений / ошибок".
-ansi
In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.
ANSI C отличается от C99 (пока). Кроме того, -Wall
также может представлять интерес, но только -pedantic
должен делать то, что вы хотите.