Кроме того, какие другие предупреждения были полезны людям?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Кроме того, какие другие предупреждения были полезны людям?
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 иногда бывает неприятно).
Начиная с 2011-09-01, с версией gcc версии 4.6.1
Мой текущий псевдоним "development"
gcc -std=c89 -pedantic -Wall \ -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat=2 \ -Wswitch-default -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-equal -Wstrict-aliasing=2 -Wredundant-decls \ -Wold-style-definition -Werror \ -ggdb3 \ -O0 \ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
Псевдоним "release"
gcc -std=c89 -pedantic -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 \ -Wstrict-aliasing=2 -ffloat-store -fno-common -fstrict-aliasing \ -lm -std=c89 -pedantic -O0 -ggdb3 -pg --coverage
"release" псевдоним
gcc -lm -std=c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
Мне нравится -Werror. Сохраняет код предупреждения бесплатно.
Я начал с С++, поэтому, когда я сделал переход к обучению C, я убедился, что был экстра-аналом:
-fmessage-length=0 -ansi -pedantic -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict-aliasing -Wformat=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-unused-parameter -Wuninitialized -Wold-style-definition -Wstrict-prototypes -Wmissing-prototypes
Получите руководство по используемой вами версии GCC, найдите все доступные параметры предупреждения, а затем деактивируйте только те, для которых у вас есть веские основания для этого. (Например, не изменяемые сторонние заголовки, которые дадут вам много предупреждений в противном случае.) Опишите эти причины. (В Makefile или где бы вы ни устанавливали эти параметры.) Просмотрите настройки при регулярных интервалах и всякий раз, когда вы обновляете свой компилятор.
Компилятор - ваш друг. Предупреждения - ваш друг. Дайте компилятору как можно больше шансов рассказать о возможных проблемах.
Я также использую:
-Wstrict-Переполнение = 5
Чтобы уловить эти неприятные ошибки, которые могут возникнуть, если я пишу код, который полагается на поведение переполнения целых чисел.
и
-Wextra
Это позволяет использовать некоторые параметры, которые тоже хороши. Большинство из них предназначены для С++.
Я обычно компилирую с помощью "-W -Wall -ansi -pedantic", это помогает обеспечить максимальное качество и переносимость кода.
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Для режима "Hurt me enough" я оставляю -Wno...
Мне нравится, когда мой код предупреждает бесплатно, особенно с С++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения С++ показывают фундаментальные дефекты в исходном коде.
-pedantic-ошибка
-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type
Сейчас я использую:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Я взял этот список в основном из книги "Введение в gcc", а затем из Ульрих Дреппер в рекомендации по Оборонительному программированию (http://people.redhat.com/drepper/Defensive-slides.pdf).
Но у меня нет науки за моим списком, она просто показалась хорошим списком.
/Johan
Примечание: мне не нравятся эти педантичные флаги, хотя....
Примечание. Я думаю, что -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
Предупреждение о неинициализированных переменных не работает, если вы не укажете -O
, поэтому я включаю это в свой список:
-g -O -Wall -Werror -Wextra -pedantic -std=c99
-Wfatal-errors