2010-03-09 1 views
60

-o изменяет имя выходного файла (я обнаружил, что использование --help)Что делает «-Wall» в «g ++ -Wall test.cpp -o test»?

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

+6

«man gcc» на вашей консоли сообщает вам все об этом флаге и простой поиск в google с «gcc -Wall», а также ... –

+0

Как общий совет, попробуйте прочитать записи 'man' для программ, если вы хотите знать, что делает коммутатор, или какие переключатели доступны. Страница 'man'' gcc' может быть прочитана на http://linux.die.net/man/1/gcc - вы можете сделать быстрый поиск там для текста «-Wall» – gnud

+3

@David Sauter, Google будет не найти ничего с «-wall». Он будет исключать всю «стену» из поиска. –

ответ

77

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

+19

Дополнительные предупреждения (некоторые из которых очень полезны) можно включить с помощью '-Wextra' и' -pedantic'. – gnud

+5

Это не (почти) все. На самом деле это всего лишь небольшая часть доступных предупреждений. Это то, что «все» согласны. * На самом деле * хорошая идея состоит в том, чтобы сделать '-Wall -Wextra', а затем изучить руководство, чтобы найти столько * более * предупреждений, которые вы могли бы включить, насколько это возможно, потому что даже' -Wextra' является лишь небольшим подмножеством ... – DevSolar

+0

@DevSolar очень хорошая точка. Знаете ли вы, есть ли флаг, который означает «буквально» все * предупреждения »? – MatrixFrog

1

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

+0

На самом деле существует множество предупреждений, которые он не разрешает (например, не виртуальный dtor в классе с виртуальными методами). –

0

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

+0

Для gcc doc: «Некоторые пользователи пытаются использовать -pedantic для проверки программ для строгого соответствия ISO C. Вскоре они обнаруживают, что они не делают то, что хотят: в ней обнаруживаются некоторые методы, отличные от ISO, но не все, только для который ISO C требует диагностики, а некоторые другие, для которых была добавлена ​​диагностика ». – AProgrammer

+0

Это не дает 100% гарантии, но это помогает. –

+1

Если бы вы не написали * some *, а не * all * in, чтобы предупредить о * всех несоответствующих деталях, я бы не прокомментировал. Но ваша нынешняя формулировка просто распространила заблуждение, о котором предупреждает gcc-документация. – AProgrammer

6

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

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

22

Просмотреть man 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 

-Wextra содержит:

-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) 

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

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

-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat- nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format- атрибут -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-macro -Wwrite-strings -WC++ - compat -Werror = объявление-после-оператора -Werror = неявная-функция-декларация -Wmissing-prototypes -Werror = вложенные-externs -Werror = old-style-definition -Werror = строгие прототипы

13

Печально ни один из ответов не является ссылкой на самом деле соответствующую часть руководства, которая действительно приносит его в точку:

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

[...]

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

Ergo:

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

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


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

1

enables most warning messages.

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