Рекомендуемые опции предупреждения gcc для C

Кроме того, какие другие предупреждения были полезны людям?

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

Мой текущий псевдоним «разработки»

 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

псевдоним “development”

 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

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

Я начал с C ++, поэтому, когда я перешел на изучение CI, обязательно был бы лишним:

 -fmessage длина = 0
 -ansi -pedantic -std = c99
 -Werror
 -Wall
 -Wextra
 -Wwrite-строки
 -Winit-я
 -Wcast выравнивания
 -Wcast-каче
 -Wpointer-Arith
 -Wstrict ступенчатости
 -Wformat = 2
 -Wmissing-декларации
 -Wmissing-include-каталоги
 -Wno-неиспользованный-параметр
 -Wuninitialized
 -Wold стиль четкость
 -Wstrict-прототипы
 -Wmissing-прототипы

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

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

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

-Wstrict-Переполнение = 5

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

А также:

-Wextra

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

Обычно я компилирую с помощью «-W -Wall -ansi -pedantic», что помогает обеспечить максимальное качество и переносимость кода.

-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter

Для режима «Hurt me enough» я оставляю -Wno …

Мне нравится, когда мой код предупреждает бесплатно, особенно с C ++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения 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

  • Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' в 'System.Collections.Generic.List
  • Вывод типа Java: ссылка неоднозначна в Java 8, но не Java 7
  • Почему C # ограничивает набор типов, которые могут быть объявлены как const?
  • 'Delegate' System.Action 'не принимает 0 аргументов.' Является ли это ошибкой компилятора C # (lambdas + два проекта)?
  • «Нестатический метод не может ссылаться на статический контекст»
  • Конструктор Java не компилируется должным образом
  • Что означает «возможное преобразование с потерями» и как его исправить?
  • c ++ ошибка компиляции: ISO C ++ запрещает сравнение между указателем и целым числом
  • Java 8: Ссылка на неоднозначна
  • constexpr не работает, если функция объявлена ​​внутри classа
  • Android java.exe закончил с ненулевым значением выхода 1
  • Давайте будем гением компьютера.