-o изменяет имя выходного файла (я обнаружил, что использование --help)
Но я не могу узнать, что делает -Wall
?
-o изменяет имя выходного файла (я обнаружил, что использование --help)
Но я не могу узнать, что делает -Wall
?
Это сокращение от "warn all" - оно включает (почти) все предупреждения, о которых g++ может рассказать. Обычно это хорошая идея, особенно если вы новичок, потому что понимание и исправление этих предупреждений может помочь вам решить множество различных проблем в вашем коде.
Смотрите 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)
Есть много других предупреждений, которые вы должны включить явно.
например. для нашего 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-attribute -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 -WС++ - compat -Werror = объявление-после-оператора -Werror = неявная-функция-декларация -Wmissing-prototypes -Werror = вложенные-externs -Werror = old-style-definition -Werror = строгие прототипы
Довольно печально, что ни один из ответов не цитирует фактически соответствующую часть руководства, что действительно приводит ее к определенной точке:
Это позволяет все предупреждения о конструкциях, которые некоторые пользователи считают сомнительные, и которые легко избежать (или изменить для предотвращения предупреждения), даже в сочетании с макросами.
[...]
Обратите внимание, что некоторые флаги предупреждения не подразумеваются
-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
Он позволяет все предупреждения. (читается как "Warning All" )
Это enables most warning messages
.
Вы можете узнать больше, если используете g++ --help=warnings
.
Здесь отображаются все предупреждения. Я бы рекомендовал также использовать -pedantic
для предупреждения о некоторых несоответствующих частях кода.