Параметры GCC для принудительной проверки стандарта Ansi C?

StackOverflow https://stackoverflow.com/questions/1821952

  •  10-07-2019
  •  | 
  •  

Вопрос

Какие параметры 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 должен делать то, что вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top