Ответ 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