Крім -Wall, які ще застереження люди вважають корисними?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Крім -Wall, які ще застереження люди вважають корисними?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Відповіді:
Я регулярно використовую:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Цей набір багато вловлює людям, які ним не користуються (людям, чий код я вперше складаю з цими прапорами); це рідко викликає у мене проблему (хоча -Wcast-qual іноді неприємність).
-O3
або щось подібне; є попередження, які генеруються лише при оптимізації коду.
-m32
і -m64
(звичайно, в окремих прогонах) забезпечує кращий захист від різних помилок у способі використання printf()
та scaf()
специфікаціях перетворення.
Станом на 01.09.2011, з gcc версії 4.6.1
Мій нинішній псевдонім "розробки"
gcc -std = c89 -педантичний -Стіна \ -Wno-відсутні-фігурні дужки -Wextra -Wno-відсутні-поле-ініціалізатори -Wformat = 2 \ -Wswitch-за замовчуванням -Wswitch-enum -Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-prototypes -Winline \ -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \ -Wlogical-op -Wfloat-jednaкий -Wstrict-aliasing = 2 -Непотрібні відхилення \ -Визначення стилю Wld -Помилка \ -ggdb3 \ -O0 \ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
Псевдонім "звільнення"
gcc -std = c89 -педантик -O3 -DNDEBUG -flto -lm
Станом на 2009-11-03
"псевдонім розвитку"
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs \ -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code \ -Wrestrict-псевдонім = 2 -ffloat-store -fno-common -fstrict-aliasing \ -lm -std = c89 -пемантичний -O0 -ggdb3 -pg - покриття
"звільнити" псевдонім
gcc -lm -std = c89 -педантик -O3 -DNDEBUG --комбінат -fwhole-program -funroll-loops
-Wfloat-equal
додано до мого псевдоніма. Дякую Марк
-Wstrict-aliasing=2
насправді знижує рівень попередження, що -Wstrict-aliasing=3
мається на увазі -Wall
, принаймні з останньою версією gcc.
Мені подобається -Werror. Зберігає попередження коду вільним.
#warning
хорошого побічного ефекту від використання -Werror
.
-Werror
за замовчуванням не використовуєте у своїх збірках, це дратує пакувальників, які використовують інші версії компілятора, оскільки попередження змінюються на версію компілятора, іноді код, який є попередженням для вас, матиме попередження для когось іншого тоді вони повинні копатись у вашій системі складання, щоб вимкнути її.
Я почав з C ++, тому, коли я перейшов до вивчення CI, переконався, що маю додатковий анал:
-fmessage-length = 0 -ansi -педантичний -std = c99 -Помилка -Стіна -Векстра -Wwrite-рядки -Winit-self -Wcast-вирівнювання -Wcast-qual -Зимовка-ариф -Штрихове згладжування -Формат = 2 -Відсутні декларації -Відсутні-включають-рези -Не використовується параметр -Вуніціалізований -Визначення у стилі дерева -Wstrict-прототипи -Відсутні прототипи
Отримайте посібник для використовуваної версії GCC, знайдіть усі доступні опції попередження , а потім деактивуйте лише ті, для яких у вас є вагома причина для цього. (Наприклад, незмінні сторонні заголовки, які в протилежному випадку дають вам багато попереджень.) Документуйте ці причини. (У Makefile або там, де ви встановлюєте ці параметри.) Переглядайте параметри під час регулярного інтервалу та кожного разу, коли ви оновлюєте свій компілятор.
Компілятор - ваш друг. Попередження - це ваш друг. Дайте компілятору якомога більше шансів повідомити вам про потенційні проблеми.
Я також використовую:
-Wstrict-overflow = 5
Щоб вловити ці неприємні помилки, які можуть трапитися, якщо я напишу код, який покладається на поведінку переповнення цілих чисел.
І:
-Векстра
Що дає змогу також мати приємні варіанти. Більшість з них призначені для C ++.
Я зазвичай компілюю з "-W -Wall -ansi -pedantic", це допомагає забезпечити максимальну якість і портативність коду.
-пемантичний -Стіна -Векстра -Не писати-рядки -Не використовується-параметр
У режимі "Нашкодь мені багато" я залишаю -Не ...
Мені подобається, щоб мій код попередження був безкоштовним, особливо на C ++. Хоча попередження компілятора C часто можна ігнорувати, багато попереджень C ++ мають основні дефекти у вихідному коді.
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> відносно важко помітити. Якщо вас дратує це попередження, вам слід просто перевиконати параметр foo (int /*q*/)
, це також підвищує читабельність вашого коду.
-пемантичні-помилки
clang
(компілятор C проекту LLVM), а потім скомпілюйте, -Weverything
і ви побачите, наскільки справді може стати веселе компілювання (деякі попередження абсолютно божевільні, але технічно правильні).
-Wfloat-рівні, -Whadow, -Wmissing-прототипи,
Зараз я використовую:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Я взяв цей список здебільшого з книги "Вступ до gcc", а потім з рекомендацій Ульріха Дреппера про захисне програмування ( http://people.redhat.com/drepper/Defensive-slides.pdf ).
Але у мене за списком немає жодної науки, це просто здавалося хорошим списком.
/ Йохан
Примітка: Хоча мені не подобаються ці педантичні прапори ....
Примітка: Я думаю, що -W та -Wextra - це більш-менш одне і те ж.
Я взагалі просто використовую
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
-Wfatal-errors
-Wdeclaration-after-statement
', щоб виявити код, який MSVC (який досі є в основному компілятором C89) не може обробити. 'Це неприємність. Додавання '-Wextra
' також може виявити деякі інші проблеми.