Зачем менять уровень предупреждения конкретного предупреждения в C ++? - PullRequest
4 голосов
/ 31 октября 2011

Возможности Visual C ++ #pragma warning, которые, помимо прочего, позволяют изменять уровень предупреждения конкретного предупреждения.Скажем, у предупреждения X по умолчанию уровень 4, а после

#pragma warning( 3, X )

с этого момента у него будет уровень 3.

Я понимаю, почему я временно отключил предупреждение, превратив предупреждение вошибка или включить отключение по умолчанию.Но зачем мне менять уровень предупреждения?

Я имею в виду, что уровень предупреждения конкретного предупреждения работает вместе с опцией «уровень предупреждения» компилятора /W, поэтому в настоящее время я не могу представить себе установку, в которой я быхотите изменить уровень отдельного предупреждения, поскольку отправляемое или нет предупреждение будет зависеть от настроек проекта.

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

Ответы [ 5 ]

4 голосов
/ 31 октября 2011

Если вы хотите работать на уровне 3 или 4, но хотите видеть / не видеть конкретное сообщение, вы можете изменить его уровень.Конечно, прагма может не иметь эффекта, если уровень предупреждения не тот, о котором вы думаете, но это жизнь с прагмами.

4 голосов
/ 31 октября 2011

Гораздо проще взять одно или два предупреждения уровня 4, которые вы хотите обнаружить, и использовать прагму, чтобы перевести их на уровень 3, чем использовать /W4 и отключить (/Wd####) все предупреждения, которые вы делаете. не волнует.

1 голос
/ 31 октября 2011

Примером, где я использую это, является ошибка C4996, в которой я перемещаю ее из уровня предупреждения 3 в уровень 4. Например, компилятор VS предупреждает, что sprintf может бытьнебезопасно и предлагает вместо этого использовать непереносимую функцию sprintf_s.Вы можете получить множество этих предупреждений, и вместо того, чтобы просматривать настоящие ошибки, я предпочитаю просто предотвращать их выдачу.

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

1 голос
/ 31 октября 2011

В некоторых случаях, когда вы работаете с устаревшим кодом и из-за того, что новый компилятор становится более чувствительным, вы можете захотеть уменьшить уровень предупреждений для этих модулей, чтобы избежать тысяч предупреждений. Также в некоторых случаях, когда вы взаимодействуете с сгенерированным кодом, вы хотите уменьшить уровень предупреждения. например ANTLR генерирует C-код, который вы рассматриваете как черный ящик, поэтому вы не хотите предупреждений.

0 голосов
/ 31 октября 2011

Мой опыт состоит в том, чтобы обрабатывать предупреждения и ошибки и стремиться создавать код без предупреждений. Я знаю, что это может показаться глупым или слишком строгим подходом, но в конечном итоге он действительно окупается. Поверь мне!

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