7 ответов:
Это сокращение от "предупредить всех" - он включает (почти) все предупреждения, о которых может рассказать вам g++. Обычно это хорошая идея, особенно если вы новичок, потому что понимание и исправление этих предупреждений может помочь вам исправить множество различных проблем в вашем коде.
см. man gcc.
стена включает эти предупреждения:
-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)есть еще много предупреждений, которые вы должны включить явно.
например, для нашего кода C мы используем:
-стены -Wextra -Waggregate-возвращение -Wcast-выровнять -Wcast-кач -Wdisabled-оптимизация-данные-по-ноль -Wendif-метки -Wformat-дополнительные аргументы -Wformat-небуквенный -Wformat-безопасности -Wformat-y2k -Wimplicit -Wimport -Winit-собственной Винлайн -Winvalid-ПЧ -Wjump-скучает-инит-Wlogical-ОП -Werror=отсутствует-брекеты -Wmissing-объявления -кто-хватает-формат-атрибут -Wmissing-включать-изд -Wmultichar -Wpacked -Wpointer-arith -Wreturn-тип -Wsequence-точка -Wsign-сравнить -устриц.-сглаживание -устриц.-сглаживание=2 -Wswitch -Wswitch-по умолчанию -Werror=фдоон -кто-неиспользованный -Wvariadic-макросы -Wwrite-струны -Сан. узел++-совместимость -Werror=декларация-после-заявление -Werror=неявные функции-декларации -Wmissing-прототипы -Werror=вложенного экстернов -Werror=старый-стиль-определение -Werror=строгий-прототипов
или просто набор предупреждений с https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
к сожалению, ни один из ответов не цитирует фактически соответствующую часть руководства, что действительно приводит его к точке:
Это позволяет все предупреждения о конструкциях, которые некоторые пользователи считают сомнительно, и это легко избежать (или изменить, чтобы предотвратить предупреждение), даже в сочетании с макросами.
[...]
обратите внимание, что некоторые предупреждающие флаги не подразумевается
-Wall. Некоторые из них предупреждают о конструкциях, которые пользователи вообще не считают сомнительным, но какой иногда вы можете захотеть проверить; другие предупреждают о конструкциях, которые необходимы или трудно избежать в некоторых случаях, и нет простого способа измените код, чтобы подавить предупреждение. Некоторые из них включены-Wextraно многие из них должны быть включены индивидуально.Ergo:
-Wallтут не в смысле "все предупреждения".- он также не означает "(почти) все", а не длинный выстрел.
- это тут означает набор отдельных опций это обязательно изменится.
итог, речь идет об абсолютном минимуме предупреждений, которые вы должны установить. В то время как
-Wall -Wextraлучше, он все еще не использует всю проверку ошибок, которую ваш компилятор может сделать для вас.
лично я бы не пошел меньше, чем
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Все мои текущие проекты фактически используйте список предупреждений длиннее этого (не вызывая ни одного из них). И я проверяю руководство по каждому основному выпуску для новых опций. Компилятор-ваш друг. Используйте любую диагностику, которую он может вам предложить.
Он включает предупреждения, которые считаются полезными и легко избежать в источнике писателей gcc. Существует также-W (- Wextra в новых версиях), которые считаются полезными, но для которых работа вокруг ложных срабатываний может быть затруднена или привести к неуклюжему коду.
gcc имеет также кучу других предупреждений, как правило, менее полезных. См http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
Это
enables most warning messages.Вы можете узнать больше, если вы используете
g++ --help=warnings.
Он показывает все предупреждения. Я бы рекомендовал также использовать
-pedanticчтобы предупредить о некоторых несоответствующих частях кода.
Comments