Будет ли -Wpedantic что-нибудь делать при компиляции без расширения -std?

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

1 ответ

Решение

Да, используя -pedantic делает GCC более строгим. В GCC 8.2int 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.

Другие вопросы по тегам