Will -Wpedantic do anything when compiling with a non-extension -std?

Refresh

February 2019

Views

14 time

0

If I compile my C or C++ code with GCC, using -std=c99 or -std=c++11 or some other proper ISO standard rather than a GNU extension - will -Wpedantic issue more warnings that I would usually get? e.g. With -W, -Wall or -Wall -Wextra?

1 answers

0

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

предупреждение: ISO C запрещает рамно-групп в выражениях [-Wpedantic]

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

Сравнивая и противопоставляя:

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

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

Там могут быть дополнительные варианты; Я не эксперт по ССАГПЗ диалектов и переключателей.