2015-09-18 2 views
0

Я делаю проект среднего размера (игровой движок), и однажды я решил, что было бы полезно включить все предупреждения (/Wall). Потом я увидел огромное количество совершенно бесполезных предупреждений, как:Должен ли я даже заботиться о предупреждениях уровня 4?

Warning C4820 '<unnamed-tag>': '3' bytes padding added after data member <unnamed-tag>::Data' DirectX11 Engine c:\program files (x86)\windows kits\8.1\include\um\winnt.h 14179 

Тогда я решил использовать /W4. Там все еще много бесполезных предупреждений, хотя некоторые из них действительно могут помочь мне отслеживать ошибки. Некоторые примеры:

Warning C4359 'btContactConstraint': Alignment specifier is less than actual alignment (128), and will be ignored. BulletDynamics c:\bullet3-2.83.5\src\bulletdynamics\constraintsolver\btContactConstraint.h 25 
Warning C4100 'FirstObject': unreferenced formal parameter DirectX11 Engine b:\game engine\directx11 engine\directx11 engine\character.cpp 240 

Почему кто-то должен заботиться о 4-го уровня wanings? Я думаю, что предупреждения уровня 4 следует игнорировать, потому что я потратил бы больше времени на их проверку, чем на отслеживание ошибок. Итак, /W3 идеально подходит для меня.

EDIT: Конечно, в конце проекта я бы использовал /W4 и посмотрел, какие предупреждения могут означать что-то полезное.

+1

Я когда-то видел, что кто-то поддерживает список предупреждений, которые вы должны игнорировать в MSVC, но я предполагаю, что это требует постоянного обслуживания, чтобы идти в ногу с новыми версиями ... –

+0

Вы внесли свою серьезную причину в свой вопрос: _ " основанные на марке Многие хорошие вопросы порождают определенное мнение на основе экспертного опыта, но ответы на этот вопрос будут, как правило, почти полностью основаны на мнениях, а не на фактах, ссылках или конкретном опыте ». _ –

+0

@ πάνταῥεῖ Изменено , Так лучше? – LHLaurini

ответ

1

Да, к сожалению, у VS есть много действительно бесполезных предупреждений. Я по-прежнему рекомендую вам использовать максимальный уровень, а затем отключить специальные предупреждения, которые вам не интересны. Вы получаете хорошую информацию из предупреждений. Например, проблемы выравнивания, с которыми ваш компилятор жалуется, могут замедлить выполнение вашей программы. До вас и ваши требования относительно того, что имеет значение.

+0

Спасибо. Большинство предупреждений - C4244 (возможная потеря данных). Это не похоже на то, что я не знаю, что «double» to «float» может привести к потере данных. Это пример предупреждения, который я должен отключить? Также есть много предупреждений в заголовках Windows, DirectX и Bullet, поэтому я должен отключить все предупреждения для этих заголовков, а затем включить их снова? – LHLaurini

+3

@LHLaurini C4244 следует рассматривать как критическое предупреждение и не должен быть абсолютно отключен. Неожиданное сужение является общей причиной ошибок безопасности. Для недавнего примера такого критического дефекта см. Http://googleprojectzero.blogspot.com/2015/09/stagefrightened.html (это то, для чего C4244 будет выпущен, - это код, скомпилированный с Visual C++). –

1

В общем, да, вы должны скомпилировать как можно более высокий уровень предупреждения. Хотя некоторые могут показаться бесполезными, некоторых не будет. Именно это исследование является желательным аспектом предупреждения, которое вы ищете.

Несомненно, вам также необходимо быть прагматичным в этом вопросе, если код все еще работает, несмотря на предупреждения, пока игнорирует их. Я бы рассмотрел подход, если объем слишком много; работать с предупреждениями с течением времени.

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

Смежные вопросы