Рекомендуемые опции предупреждения gcc для C
Кроме того, какие другие предупреждения были полезны людям?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Ответы
Ответ 1
Я обычно использую:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Этот набор много ловит для людей, не пользующихся им (люди, чей код я могу скомпилировать с этими флагами в первый раз); это редко дает мне проблему (хотя -Wcast-qual иногда бывает неприятно).
Ответ 2
Начиная с 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
Ответ 3
Мне нравится -Werror. Сохраняет код предупреждения бесплатно.
Ответ 4
Я начал с С++, поэтому, когда я сделал переход к обучению 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
Ответ 5
Получите руководство по используемой вами версии GCC, найдите все доступные параметры предупреждения, а затем деактивируйте только те, для которых у вас есть веские основания для этого. (Например, не изменяемые сторонние заголовки, которые дадут вам много предупреждений в противном случае.) Опишите эти причины. (В Makefile или где бы вы ни устанавливали эти параметры.) Просмотрите настройки при регулярных интервалах и всякий раз, когда вы обновляете свой компилятор.
Компилятор - ваш друг. Предупреждения - ваш друг. Дайте компилятору как можно больше шансов рассказать о возможных проблемах.
Ответ 6
Я также использую:
-Wstrict-Переполнение = 5
Чтобы уловить эти неприятные ошибки, которые могут возникнуть, если я пишу код, который полагается на поведение переполнения целых чисел.
и
-Wextra
Это позволяет использовать некоторые параметры, которые тоже хороши. Большинство из них предназначены для С++.
Ответ 7
Я обычно компилирую с помощью "-W -Wall -ansi -pedantic", это помогает обеспечить максимальное качество и переносимость кода.
Ответ 8
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Для режима "Hurt me enough" я оставляю -Wno...
Мне нравится, когда мой код предупреждает бесплатно, особенно с С++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения С++ показывают фундаментальные дефекты в исходном коде.
Ответ 9
-pedantic-ошибка
Ответ 10
-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
Ответ 11
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type
Ответ 12
Сейчас я использую:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Я взял этот список в основном из книги "Введение в gcc", а затем из Ульрих Дреппер в рекомендации по Оборонительному программированию (http://people.redhat.com/drepper/Defensive-slides.pdf).
Но у меня нет науки за моим списком, она просто показалась хорошим списком.
/Johan
Примечание: мне не нравятся эти педантичные флаги, хотя....
Примечание. Я думаю, что -W и -Wextra более или менее одинаковы.
Ответ 13
Я вообще просто использую
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
Ответ 14
Предупреждение о неинициализированных переменных не работает, если вы не укажете -O
, поэтому я включаю это в свой список:
-g -O -Wall -Werror -Wextra -pedantic -std=c99
Ответ 15
-Wfatal-errors