Какие еще предупреждения, кроме -Wall, люди сочли полезными?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
c
gcc
compiler-errors
Сард
источник
источник
-Wdeclaration-after-statement
', чтобы обнаружить код, который MSVC (который по-прежнему является компилятором C89) не обрабатывается. Это неприятность. Добавление "-Wextra
может выявить и другие проблемы.-O3
что-нибудь подобное; есть предупреждения, которые генерируются только при оптимизации кода.-m32
и-m64
(разумеется, в отдельных прогонах) обеспечивает лучшую защиту от различных ошибок в способах использованияprintf()
иscaf()
спецификациях преобразования.По состоянию на 01.09.2011, с версией gcc 4.6.1
Мой текущий псевдоним "разработки"
Псевдоним "выпуска"
По состоянию на 03.11.2009
псевдоним "разработка"
псевдоним "выпуска"
источник
-Wfloat-equal
добавлен к моему псевдониму. Спасибо, Марк-Wstrict-aliasing=2
фактически снижает уровень предупреждений,-Wstrict-aliasing=3
подразумеваемых-Wall
, по крайней мере, в последней версии gcc.Мне нравится -Werror. Сохраняет код предупреждения свободным.
источник
#warning
хорошего побочного эффекта от использования-Werror
.-Werror
по умолчанию не используются в ваших сборках, это раздражает упаковщиков, которые используют разные версии компилятора от вас, поскольку предупреждения меняются с версией компилятора, иногда код, который предупреждает вас бесплатно, будет иметь предупреждение для кого-то еще и затем им придется копаться в вашей системе сборки, чтобы отключить ее.Я начал с C ++, поэтому, когда я переключился на изучение CI, я постарался быть экстра-анальным:
источник
Получите руководство для используемой версии GCC, найдите все доступные варианты предупреждений и затем отключите только те, для которых у вас есть веские основания для этого. (Например, немодифицируемые сторонние заголовки, которые в противном случае выдали бы вам множество предупреждений.) Задокументируйте эти причины. (В Makefile или где бы вы ни установили эти параметры.) Проверяйте настройки через регулярные промежутки времени и всякий раз , когда вы обновляете свой компилятор.
Компилятор - ваш друг. Предупреждения - ваш друг. Дайте компилятору как можно больше шансов сообщить вам о потенциальных проблемах.
источник
Еще я использую:
Чтобы отловить эти неприятные ошибки, которые могут возникнуть, если я напишу код, основанный на поведении переполнения целых чисел.
И:
Это позволяет использовать некоторые параметры, которые тоже неплохо иметь. Однако большинство из них предназначены для C ++.
источник
Я обычно компилирую с помощью "-W -Wall -ansi -pedantic", это помогает обеспечить максимальное качество и переносимость кода.
источник
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Для режима "Сделай мне больно" я оставляю -Нет ...
Мне нравится, когда в моем коде нет предупреждений, особенно в C ++. Хотя предупреждения компилятора C часто можно игнорировать, многие предупреждения C ++ указывают на фундаментальные дефекты исходного кода.
источник
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> относительно трудно обнаружить. Если вас раздражает это предупреждение, просто закомментируйте параметрfoo (int /*q*/)
, это также повысит читаемость вашего кода.-педантические-ошибки
источник
clang
(компилятор C проекта LLVM), а затем скомпилировать с помощью,-Weverything
и вы увидите, насколько действительно интересной может стать компиляция (некоторые из предупреждений совершенно безумны, но технически верны).-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
источник
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-неявное-объявление-функции -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 ).
Но у меня нет никакой науки за моим списком, это просто хороший список.
/ Йохан
Примечание: мне не нравятся эти педантичные флаги ....
Примечание: я думаю, что -W и -Wextra более или менее одно и то же.
источник
Я обычно просто использую
источник
Предупреждение о неинициализированных переменных не работает, если вы не укажете это
-O
, поэтому я включаю это в свой список:-g -O -Wall -Werror -Wextra -pedantic -std=c99
источник
-Wfatal-errors
источник