2008-09-30 3 views
74

Другие, кроме того, какие другие предупреждения были полезны людям?Рекомендуемые опции предупреждения gcc для C

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html

+10

Это так характерно для общего незнания StackOverflow умеренности, что невероятно полезный вопрос, как это было закрыто. Хорошая работа, парни. – 2015-06-17 15:04:01

ответ

1

-pedantic-ошибки

+3

+1 Это превратится в забаву. ;) – unexist 2008-09-30 20:32:56

+2

@unexist Попробуйте установить `clang` (компилятор C проекта LLVM), а затем скомпилируйте его с помощью` -Weverything`, и вы увидите, как действительно может стать компиляция man fun (некоторые из предупреждений абсолютно сумасшедшие, но они являются технически правильными). – Mecki 2013-11-08 17:42:18

2

Я обычно компилировать с "-W -Wall -ansi -pedantic" это помогает обеспечить максимальное качество и переносимость кода.

+3

только примечание -ansi overrides -std = c99 – Sard 2008-09-30 19:45:44

+1

Разве это не эквивалентно использованию -std = c89? – helpermethod 2010-04-01 16:47:57

15

Мне нравится -Werror. Сохраняет код предупреждения бесплатно.

+20

Без -Werror все другие варианты предупреждения бессмысленны. Рассмотрение предупреждений как ошибок является в значительной степени единственным способом обеспечения предупреждения. Если это просто предупреждения, разработчик может решить оставить его, потому что он уверен, что он недействителен. Это может быть и правда, но следующий разработчик не будет исправлять предупреждения, которые он представил, потому что он не видел его между всеми остальными или потому, что это еще одно предупреждение. – 2009-07-17 20:51:20

+0

Ваш абсолютно правильный. – JesperE 2009-08-20 20:42:49

+5

Я не согласен с Кристофом, потому что много раз я бы предпочел просто скомпилировать рабочую копию, а затем - устранить ошибки. – Yktula 2010-04-21 20:14:02

5

Я также использую:

-Wstrict-перелива = 5

Чтобы поймать эти неприятные ошибки, которые могут произойти, если я пишу код, который зависит от поведения переполнения целых чисел.

И:

-Wextra

Что дает некоторые варианты, которые приятно иметь, а также. Большинство из них для C++.

45

я обычно использую:

gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \ 
     -Wstrict-prototypes -Wmissing-prototypes 

Этого набора ловит много для людей, не привыкших к нему (людям, код которого я скомпилировать с этими флагами в первый раз); это редко дает мне проблему (хотя -Wcast-qual - это иногда неприятность).

2

-pedantic -Wall -Wextra -Wno-запись-строка -Wno-неиспользованный-параметр

Для режима "Hurt меня много", я ухожу прочь -Wno ...

Мне нравится иметь мой код предупреждения бесплатно, особенно с C++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения C++ показывают фундаментальные дефекты исходного кода.

1

-Wfloat-равных, -Wshadow, -Wmissing-прототипы,

1

-Wredundant-decls -Wnested-экстернов -Wstrict-прототипы -Wextra -Werror-неявной функции декларация -Wunused -Wno-unused- значение -Wreturn типа

14

Я начал с 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 
1

Сейчас я использую:

-Wall -W-Мы Xtra -Wconversion -Wshadow -Wcast-Qual -Wwrite-струна -Werror

я взял этот список в основном из книги «Введение в GCC», а затем некоторые из Ulrich Drepper о Оборонительных Рекомендаций для программирования (http://people.redhat.com/drepper/Defensive-slides.pdf).

Но у меня нет науки за моим списком, это просто показалось хорошим списком.

/Johan


Примечание: Я не люблю эти педантичных флаги, хотя ....

Примечание: Я думаю, что -W и -Wextra более или менее то же самое.

1

Я обычно просто использовать

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 
1

Предупреждение о неинициализированных переменных не работает, если не указано -O, поэтому я включил, что в моем списке:

-g -O -Wall -Werror -Wextra -pedantic -std=c99 
9

Получить в руководстве для версии GCC, которое вы используете, найдите все доступные варианты предупреждения, а затем деактивируйте только тех, для которых у вас есть , заставляющий повод сделать это. (Например, не изменяемые сторонние заголовки, которые дадут вам много предупреждений в противном случае.) Документируйте эти причины. (В Makefile или там, где вы задали эти параметры.) Просмотрите настройки при регулярных интервалах, и всякий раз, когда вы обновляете свой компилятор.

Компилятор - ваш друг. Предупреждения - ваш друг. Дайте компилятору как можно больше шансов рассказать о возможных проблемах.

32

По состоянию на 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 
Смежные вопросы