Другие, кроме того, какие другие предупреждения были полезны людям?Рекомендуемые опции предупреждения gcc для C
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Другие, кроме того, какие другие предупреждения были полезны людям?Рекомендуемые опции предупреждения gcc для C
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
-pedantic-ошибки
+1 Это превратится в забаву. ;) – unexist 2008-09-30 20:32:56
@unexist Попробуйте установить `clang` (компилятор C проекта LLVM), а затем скомпилируйте его с помощью` -Weverything`, и вы увидите, как действительно может стать компиляция man fun (некоторые из предупреждений абсолютно сумасшедшие, но они являются технически правильными). – Mecki 2013-11-08 17:42:18
Я обычно компилировать с "-W -Wall -ansi -pedantic" это помогает обеспечить максимальное качество и переносимость кода.
только примечание -ansi overrides -std = c99 – Sard 2008-09-30 19:45:44
Разве это не эквивалентно использованию -std = c89? – helpermethod 2010-04-01 16:47:57
Мне нравится -Werror. Сохраняет код предупреждения бесплатно.
Без -Werror все другие варианты предупреждения бессмысленны. Рассмотрение предупреждений как ошибок является в значительной степени единственным способом обеспечения предупреждения. Если это просто предупреждения, разработчик может решить оставить его, потому что он уверен, что он недействителен. Это может быть и правда, но следующий разработчик не будет исправлять предупреждения, которые он представил, потому что он не видел его между всеми остальными или потому, что это еще одно предупреждение. – 2009-07-17 20:51:20
Ваш абсолютно правильный. – JesperE 2009-08-20 20:42:49
Я не согласен с Кристофом, потому что много раз я бы предпочел просто скомпилировать рабочую копию, а затем - устранить ошибки. – Yktula 2010-04-21 20:14:02
Я также использую:
-Wstrict-перелива = 5
Чтобы поймать эти неприятные ошибки, которые могут произойти, если я пишу код, который зависит от поведения переполнения целых чисел.
И:
-Wextra
Что дает некоторые варианты, которые приятно иметь, а также. Большинство из них для C++.
я обычно использую:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Этого набора ловит много для людей, не привыкших к нему (людям, код которого я скомпилировать с этими флагами в первый раз); это редко дает мне проблему (хотя -Wcast-qual - это иногда неприятность).
-pedantic -Wall -Wextra -Wno-запись-строка -Wno-неиспользованный-параметр
Для режима "Hurt меня много", я ухожу прочь -Wno ...
Мне нравится иметь мой код предупреждения бесплатно, особенно с C++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения C++ показывают фундаментальные дефекты исходного кода.
-Wfloat-равных, -Wshadow, -Wmissing-прототипы,
-Wredundant-decls -Wnested-экстернов -Wstrict-прототипы -Wextra -Werror-неявной функции декларация -Wunused -Wno-unused- значение -Wreturn типа
Я начал с C++, поэтому, когда я сделал переход к обучению CI удостоверились быть экстра-анал:
-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
Сейчас я использую:
-Wall -W-Мы Xtra -Wconversion -Wshadow -Wcast-Qual -Wwrite-струна -Werror
я взял этот список в основном из книги «Введение в GCC», а затем некоторые из Ulrich Drepper о Оборонительных Рекомендаций для программирования (http://people.redhat.com/drepper/Defensive-slides.pdf).
Но у меня нет науки за моим списком, это просто показалось хорошим списком.
/Johan
Примечание: Я не люблю эти педантичных флаги, хотя ....
Примечание: Я думаю, что -W и -Wextra более или менее то же самое.
-Wfatal-errors
Я обычно просто использовать
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
Получить в руководстве для версии GCC, которое вы используете, найдите все доступные варианты предупреждения, а затем деактивируйте только тех, для которых у вас есть , заставляющий повод сделать это. (Например, не изменяемые сторонние заголовки, которые дадут вам много предупреждений в противном случае.) Документируйте эти причины. (В Makefile или там, где вы задали эти параметры.) Просмотрите настройки при регулярных интервалах, и всякий раз, когда вы обновляете свой компилятор.
Компилятор - ваш друг. Предупреждения - ваш друг. Дайте компилятору как можно больше шансов рассказать о возможных проблемах.
По состоянию на 2011-09-01, с GCC версии 4.6.1
Мой текущий "Развитие" Алиас
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
"релиз" псевдоним
gcc -std=c89 -pedantic -O3 -DNDEBUG -flto -lm
По состоянию на 2009-11-03
"d АЗВИТИЕ»псевдоним
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
„релиз“псевдоним
gcc -lm -std=c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
Это так характерно для общего незнания StackOverflow умеренности, что невероятно полезный вопрос, как это было закрыто. Хорошая работа, парни. – 2015-06-17 15:04:01