Лучший уровень предупреждения компилятора для компиляторов C / C ++? - PullRequest
45 голосов
/ 30 декабря 2008

Какой уровень предупреждения компилятора вы рекомендуете для разных компиляторов C / C ++?

gcc и g ++ позволят вам многое сделать на уровне по умолчанию. Я считаю, что лучший уровень предупреждения для меня - «Стена». И я всегда пытаюсь удалить код исправления для предупреждений, которые он генерирует. (Даже глупые об использовании скобок для правил логического приоритета или сказать, что я действительно имею в виду «если (х = у)»)

Какие ваши любимые уровни для разных компиляторов, таких как Sun CC, aCC (HPUX?), Visual Studio, intel?

Edit:

Я просто хотел отметить, что я не использую "-Werror" (но я понимаю, что это утилита) в gcc / g ++, потому что я использую:

#warning "this is a note to myself"

в нескольких местах в моем коде. Все ли компиляторы понимают макрос #warning?

Ответы [ 14 ]

1 голос
/ 21 октября 2015

Мне также нравится проверять все возможные предупреждения, которые выдает компилятор в моем проекте. К сожалению, ответ о Intel C ++ компиляторе был не очень информативен для меня (ссылка не работает). Я сделал свое собственное исследование.

Поскольку я использую Qt 5 и qmake , у меня есть предопределенный уровень предупреждения -w1 . С этим ничего не поделаешь. Но это еще не все, и у ICC больше ключей:

-Wcomment 
-Weffc++ 
-Wextra-tokens 
-Wformat 
-Winline // don't use, show only for example
-Wmain 
-Wmissing-declarations 
-Wmissing-prototypes 
-Wnon-virtual-dtor 
-Wp64 
-Wpointer-arith 
-Wremarks 
-Wreturn-type 
-Wsign-compare 
-Wstrict-aliasing 
-Wstrict-prototypes 
-Wtrigraphs 
-Wuninitialized 
-Wunknown-pragmas 
-Wunused-variable

Подробнее обо всех клавишах .

Также хочу добавить, что, в отличие от GCC, ICC выдает несколько предупреждений для одного ключа, например, ключ -Weffc ++ . Если вы хотите видеть только несколько предупреждений из всего списка, используйте клавишу -wd .

Я отключаю: -wd1418,2012,2015,2017,2022,2013 . И предупреждения -wd1572,873,2259,2261 были отключены в qmake по умолчанию.

Я использую PCH, и мне было очень неприятно видеть в Qt Creator сообщения об использовании файла PCH, такие как ошибка. Чтобы отключить, используйте -Wno-pch-messages .

Для отключения предупреждения в коде я использую:

#if defined(Q_CC_INTEL)
    #pragma warning( push )
    #pragma warning( disable: 2021 )
#endif

// some code

#if defined(Q_CC_INTEL)
    #pragma warning( pop )
#endif
1 голос
/ 30 декабря 2008

В Visual C я использую / w3. Я считаю, что w4 выдает слишком много шума (много из библиотек MS), чтобы пройти через каждую сборку. Дополнительные предупреждения очень незначительны и до сих пор не были причиной ошибки.

0 голосов
/ 31 декабря 2008

Компиляторы GCC становятся строже с каждой новой версией. Используйте флаг -ansi для выдачи предупреждений о нарушениях строжайшей интерпретации стандартов языка ANSI. Обычно это работает в вашем текущем компиляторе, но может привести к ошибкам в следующей версии или в других компиляторах. Этот флаг поможет вам избежать необходимости переносить код каждый раз, когда вы переключаете компиляторы / версии.

0 голосов
/ 30 декабря 2008

Спасибо всем за ответы. Прошло много времени с тех пор, как я использовал что-нибудь, кроме gcc / g ++. Я должен был использовать давным-давно:

-fmessage-length = 0 (since g++ had an ugly habit of line breaking messages)

-Wno-deprecated      (since I worked on a code base pre-existing the std namespace)

Я помню, что (по крайней мере 5 лет назад) что-либо выше уровня предупреждения по умолчанию в компиляторе Sun Workshop CC было слишком много Я также думаю, что это могло быть правдой для компилятора Intel. Я не был в курсе не-gnu-компиляторов некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...