-o змінює ім'я вихідного файлу (я виявив, що використання --help)
Але я не можу з'ясувати, що -Wall
робить?
-o змінює ім'я вихідного файлу (я виявив, що використання --help)
Але я не можу з'ясувати, що -Wall
робить?
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)
Є набагато більше застережень, які ви повинні чітко ввімкнути.
Наприклад, для нашого коду С, який ми використовуємо:
-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-аб'яви -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 ++ -1
або просто набір попереджень за допомогою https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
На жаль, жодна з відповідей не цитує фактично відповідну частину посібника, що насправді доводить це до суті:
Це включає всі попередження щодо конструкцій, які деякі користувачі вважають сумнівними, і яких легко уникнути (або змінити, щоб запобігти попередженню), навіть у поєднанні з макросами.
[...]
Зверніть увагу, що деякі попереджувальні прапори не передбачаються
-Wall
. Деякі з них попереджають про конструкції, які користувачі зазвичай не вважають сумнівними, але які іноді ви можете перевірити; інші попереджають про конструкції, яких необхідно або важко уникати в деяких випадках, і немає простого способу модифікувати код, щоб придушити попередження. Деякі з них увімкнені,-Wextra
але багато з них мають бути активовані окремо.
Ерго:
-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
Він відображає всі попередження. Я б рекомендував також використовувати -pedantic
для попередження про деякі невідповідні частини коду.