Будет ли -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.