Что делает "-Wall" в "g ++ -Wall test.cpp -o test"? - PullRequest
73 голосов
/ 09 марта 2010

-o изменяет имя выходного файла (я обнаружил, что с помощью --help)

Но я не могу узнать, что делает -Wall?

Ответы [ 7 ]

93 голосов
/ 09 марта 2010

Это сокращение от "warn all" - оно включает (почти) все предупреждения, о которых g ++ может вам рассказать. Обычно это хорошая идея, особенно если вы новичок, потому что понимание и исправление этих предупреждений может помочь вам решить множество различных проблем в вашем коде.

28 голосов
/ 03 сентября 2012

см. Человек gcc.

-Wall включает следующие предупреждения:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
 Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) 
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) 
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type 
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing 
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas 
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable 
-Wvolatile-register-var

-Вэкстра содержит:

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
 or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

Есть еще много предупреждений, которые вы должны включить явно.

например. для нашего кода C мы используем:

-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-оптимизация -Wdiv-by-zero -Wendif-метки -Wformat-extra-args -Wformat-нелитеральный -Wformat-security -Wformat- y2k-Скрытый -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-фигурные скобки -Wmissing-декларации -Wno-отсутствующий-формат-атрибут -Wmissing-include-dirs - Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macroros -Wwrite- строки -Wc ++ - compat -Werror = объявление-после-оператора -Werror = неявное-объявление-функции -Wmissing-prototypes -Werror = nested-externs -Werror = старое-определение-стиля -Werror = строгие-прототипы

или просто набор предупреждений с https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html

16 голосов
/ 06 февраля 2014

К сожалению, ни один из ответов не цитирует действительно релевантную часть руководства, которая действительно приводит его к сути:

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

[...]

Обратите внимание, что некоторые флаги предупреждения не подразумеваются -Wall. Некоторые из них предупреждают о конструкциях, которые пользователи обычно не считают сомнительными, но которые иногда вы можете захотеть проверить; другие предупреждают о конструкциях, которые необходимо или трудно избежать в некоторых случаях, и нет простого способа измените код для подавления предупреждения. Некоторые из них включены -Wextra но многие из них должны быть включены по отдельности.

Ergo:

  • -Wall не не означает «все предупреждения».
  • Это также не означает «(почти) все», а не длинным выстрелом.
  • Это означает означает набор отдельных параметров , который обязательно изменится .

Итог, это абсолютный минимум предупреждений, которые вы должны установить. Хотя -Wall -Wextra лучше, он по-прежнему не использует всю проверку ошибок, которую может сделать ваш компилятор.


Лично я бы не пошел меньше, чем -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Все мои текущие проекты на самом деле используют список предупреждений длиннее (без каких-либо из них). И я проверяю руководство для каждого основного выпуска на наличие новых опций. Компилятор твой друг. Используйте любую диагностику, которую он может вам предложить.

6 голосов
/ 09 марта 2010

Включает предупреждения, которые считаются полезными и , которых легко избежать у источника авторами gcc. Существует также -W (-Wextra в более новых версиях), которые считаются полезными, но для которых обходные ложные срабатывания могут быть затруднены или привести к неуклюжему коду.

У gcc есть также множество других предупреждений, как правило, менее полезных. Смотри http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options

1 голос
/ 18 января 2015

Это enables most warning messages.

Вы можете узнать больше, если используете g++ --help=warnings.

0 голосов
/ 09 марта 2010

Показывает все предупреждения. Я бы также рекомендовал использовать -pedantic для предупреждения о некоторых несоответствующих частях кода.

0 голосов
/ 09 марта 2010

Включает все предупреждения. (читается как «Предупреждение всех»)

...