Будет ли -Wpedantic что-нибудь делать при компиляции без расширения -std? - PullRequest
0 голосов
/ 12 февраля 2019

Если я скомпилирую свой код C или C ++ с помощью GCC, используя -std=c99 или -std=c++11 или какой-либо другой соответствующий стандарт ISO, а не расширение GNU - будет ли -Wpedantic выдавать больше предупреждений, которые я обычно получаю?например, с -W, -Wall или -Wall -Wextra?

1 Ответ

0 голосов
/ 12 февраля 2019

Да, использование -pedantic делает GCC более строгим.В GCC 8.2 , int foo(void) { return ({3;}); } компилируется без жалоб, используя только -Wall -std=c11, но получает это предупреждение с добавлением -pedantic:

предупреждение: ISO C запрещает использование фигурных скобок в выражениях[-Wpedantic]

(Используемая функция, выражения выражений, предназначена для использования в макросах. В моем примере она используется исключительно как доказательство принципа.)

Сравнениеи контрастирование:

  • Использование, например, -std=gnu11, запрашивает нестандартную версию C.
  • Использование -std=c11, запросы стандартная версия C. Стандарт C разрешает и даже приглашает расширения, поэтому вы все равно можете использовать определенные расширения GNU с -std=c11.
  • Добавление -pedantic запрашивает, чтобы компилятор предупреждал об определенных расширениях GNUи «традиционные» функции, которые он разрешает иначе.

Документация также предполагает, что GCC может быть небрежным в отношении определенных предупреждений, которые он должен выдавать со стандартом C, и -pedantic заставляет еговыдать все предупреждения, требуемые сстрогий ISO C.

Возможны дополнительные варианты;Я не специалист по диалектам и коммутаторам GCC.

...