«man gcc» на вашей консоли расскажет вам все об этом флаге, а также простом поиске в Google с «gcc -Wall» ...
Дэвид Саутер,
В качестве общего совета попробуйте прочитать manзаписи для программ, если вы хотите знать, что делает переключатель или какие переключатели доступны. manСтраница gccможет быть прочитана на linux.die.net/man/1/gcc - вы можете сделать быстрый поиск там для текста «-Wall»
gnud
6
@David Sauter, Google ничего не найдет с "-wall". Это исключит из поиска всю «стену».
Кирилл В. Лядвинский 09
@Kirill Нет, если вы используете цитаты, как я предполагаю, что Дэвид имел в виду
gnud
1
// Я всегда думал, что это дань уважения Ларри Уоллу.
Натан Басанезе,
Ответы:
110
Это сокращение от «предупреждать всех» - оно включает (почти) все предупреждения, о которых может сообщить g ++. Обычно это хорошая идея, особенно если вы новичок, потому что понимание и устранение этих предупреждений может помочь вам исправить множество различных проблем в вашем коде.
Дополнительные предупреждения (некоторые из которых довольно полезны) можно включить с помощью -Wextraи -pedantic.
gnud 09
7
Это еще не (почти) все. На самом деле это лишь очень небольшая часть доступных предупреждений. Это те, с которыми согласны «все». Действительно хорошая идея заключается в том, чтобы сделать -Wall -Wextra, а затем внимательно просмотреть руководство , чтобы найти , как много больше предупреждений вы могли бы позволить , как это возможно, потому что даже -Wextraэто лишь небольшая часть ...
DevSolar
@DevSolar очень хорошее замечание. Вы знаете, есть ли флаг, означающий «буквально все предупреждения»?
MatrixFrog
1
@MatrixFrog: К сожалению, такой опции нет, по крайней мере, для известных мне компиляторов. И список доступных предупреждений со временем меняется ... если бы команда GCC не отключила -Wunreachable-codeнекоторое время назад, Apple была бы намного счастливее в наши дни. ;-)
DevSolar
36
См. 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)
Есть еще много предупреждений, которые нужно включить явно.
К сожалению, ни один из ответов не цитирует действительно актуальную часть руководства, что действительно подводит нас к сути:
Это включает все предупреждения о конструкциях, которые некоторые пользователи считают сомнительными и которых легко избежать (или изменить, чтобы предотвратить предупреждение), даже в сочетании с макросами.
[...]
Обратите внимание, что некоторые предупреждающие флаги не подразумеваются -Wall. Некоторые из них предупреждают о конструкциях, которые пользователи обычно не считают сомнительными, но которые иногда вы можете захотеть проверить; другие предупреждают о конструкциях, которые в некоторых случаях необходимы или которых трудно избежать, и нет простого способа изменить код, чтобы подавить предупреждение. Некоторые из них включены, -Wextra
но многие из них необходимо включать индивидуально.
Ergo:
-Wallвовсе не означает , «все предупреждения».
Это также не означает «(почти) все», не в последнюю очередь.
Он имеет в виду набор отдельных вариантов , которые связаны изменить .
В итоге, речь идет об абсолютном минимуме предупреждений, которые вы должны установить. Хотя -Wall -Wextraэто лучше, он по-прежнему не использует всю проверку ошибок, которую ваш компилятор может сделать за вас.
Лично я бы не стал покупать меньше -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Во всех моих текущих проектах действительно используется список предупреждений большего размера (без срабатывания каких-либо из них). И я проверяю руководство по каждому крупному выпуску на предмет новых возможностей. Компилятор - ваш друг. Используйте любую диагностику, которую он может вам предложить.
Я начал изучать программирование на C ++. Я использую принципы программирования и практикуюсь в cpp . Моя система - ubuntu 16.04, в качестве редактора я использую vscode. Вы рекомендуете мне использовать вашу, -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualпока я компилирую, g++ -std=c++11пока изучаю C ++ и программирование? Или мне следует пропустить эту часть и начать использовать флаги сообщений об ошибках позже? Если да, то когда мне начинать с сообщений об ошибках?
Scientific_explorer
2
@vkv: Я считаю, что компилятор действительно ваш друг, и вы должны воспользоваться каждым небольшим советом, который он может вам дать.
DevSolar
6
Он включает предупреждения, которые считаются полезными и авторы gcc легко избежать в источнике. Также есть -W (-Wextra в новых версиях), которые считаются полезными, но для которых обход ложных срабатываний может быть затруднен или привести к неуклюжему коду.
Для gcc doc: «Некоторые пользователи пытаются использовать -pedantic для проверки программ на строгое соответствие ISO C. Вскоре они обнаруживают, что он не делает то, что им нужно: он находит некоторые методы, отличные от ISO, но не все - только те, для которых ISO C требует диагностики и некоторых других, для которых была добавлена диагностика ".
AProgrammer 09
100% гарантии не дает, но помогает.
Кирилл В. Лядвинский 09
1
Если бы вы не написали some вместо all in «чтобы предупредить обо всех несоответствующих частях», я бы не стал комментировать. Но ваша текущая формулировка просто распространяет заблуждение, о котором предупреждает документация gcc.
AProgrammer 09
Исправлена. Но на практике это скорее похоже на «большинство», а не на «некоторые».
man
записи для программ, если вы хотите знать, что делает переключатель или какие переключатели доступны.man
Страницаgcc
может быть прочитана на linux.die.net/man/1/gcc - вы можете сделать быстрый поиск там для текста «-Wall»Ответы:
Это сокращение от «предупреждать всех» - оно включает (почти) все предупреждения, о которых может сообщить g ++. Обычно это хорошая идея, особенно если вы новичок, потому что понимание и устранение этих предупреждений может помочь вам исправить множество различных проблем в вашем коде.
источник
-Wextra
и-pedantic
.-Wall -Wextra
, а затем внимательно просмотреть руководство , чтобы найти , как много больше предупреждений вы могли бы позволить , как это возможно, потому что даже-Wextra
это лишь небольшая часть ...-Wunreachable-code
некоторое время назад, Apple была бы намного счастливее в наши дни. ;-)См. 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-optimisation -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-declrations -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-macros -Wwrite-strings -Wc ++ -compat -Werror = объявление-после-утверждения -Werror = объявление-неявной-функции -Wmissing-prototypes -Werror = nested-externs -Werror = определение-в старом стиле -Werror = strict-prototypes
или просто набор предупреждений с https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
источник
К сожалению, ни один из ответов не цитирует действительно актуальную часть руководства, что действительно подводит нас к сути:
Ergo:
-Wall
вовсе не означает , «все предупреждения».В итоге, речь идет об абсолютном минимуме предупреждений, которые вы должны установить. Хотя
-Wall -Wextra
это лучше, он по-прежнему не использует всю проверку ошибок, которую ваш компилятор может сделать за вас.Лично я бы не стал покупать меньше
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
. Во всех моих текущих проектах действительно используется список предупреждений большего размера (без срабатывания каких-либо из них). И я проверяю руководство по каждому крупному выпуску на предмет новых возможностей. Компилятор - ваш друг. Используйте любую диагностику, которую он может вам предложить.источник
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
пока я компилирую,g++ -std=c++11
пока изучаю C ++ и программирование? Или мне следует пропустить эту часть и начать использовать флаги сообщений об ошибках позже? Если да, то когда мне начинать с сообщений об ошибках?Он включает предупреждения, которые считаются полезными и авторы 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
.источник
Он включает все предупреждения. (читается как "Предупреждение всем")
источник
-Wall
просто означает «большинство предупреждений» вместо «все предупреждения».Он показывает все предупреждения. Я бы рекомендовал также использовать
-pedantic
для предупреждения о некоторых несоответствующих частях кода.источник