Прежде всего, я согласен с вами, вам нужно избавиться от всех предупреждений. Каждое маленькое предупреждение, которое вы получаете, избавьтесь от него, устранив проблему.
Прежде чем я продолжу с тем, что при перечитывании равнозначно тому, что выглядит как напыщенная речь, позвольте мне подчеркнуть, что при использовании такого кода не наблюдается никакого снижения производительности. Используя Reflector для проверки кода, кажется, что код, помеченный как недоступный, фактически не помещается в выходную сборку.
Это, однако , проверено компилятором. Это само по себе может быть достаточно веской причиной, чтобы игнорировать мою напыщенную речь.
Другими словами, чистый эффект избавления от этого предупреждения состоит в том, что вы избавляетесь от предупреждения.
Также обратите внимание, что этот ответ является мнением . Возможно, вы не согласны с моим мнением и хотите использовать #pragma
, чтобы замаскировать предупреждающее сообщение, но, по крайней мере, иметь информированное мнение о том, что это делает. Если вы делаете, кого волнует, что я думаю.
Сказав это, почему вы пишете код, который не будет достигнут?
Используете ли вы consts вместо "define"?
Предупреждение не является ошибкой. Для вас заметка - проанализировать этот кусок кода и выяснить, правильно ли вы поступили. Обычно нет. В случае вашего конкретного примера вы намеренно компилируете код, который для вашей конкретной конфигурации никогда не будет выполняться.
Почему код даже там? никогда не выполнится.
Вас не смущает, что на самом деле означает слово "константа"? Константа означает «это никогда не изменится, и если вы думаете, это не изменится». Вот что такое константа. Это не будет, и не может и не должно измениться. Когда-либо.
Компилятор знает это и скажет вам, что у вас есть код, который из-за константы никогда не будет выполняться. Обычно это ошибка.
Эта константа изменится? Если это так, то это, очевидно, не константа, а нечто, зависящее от типа вывода (Debug, Release), и это тип вещи "#define", поэтому удалите его и используйте вместо этого этот механизм. Для людей, читающих ваш код, становится понятнее, от чего зависит этот конкретный код. Visual Studio также услужливо затеняет код, если вы выбрали режим вывода, который не устанавливает определение, поэтому код не будет компилироваться. Это то, для чего были созданы определения компилятора.
С другой стороны, если константа не изменится, когда-либо, по любой причине, удалите код, он вам не понадобится.
В любом случае, не поддавайтесь легкому исправлению, просто отключив это предупреждение для этого куска кода, это все равно, что принимать аспирин, чтобы «исправить» проблемы с болями в спине. Это кратковременное решение, но оно маскирует проблему. Вместо этого исправьте основную проблему.
Чтобы закончить этот ответ, мне интересно, не существует ли совсем другого решения вашей проблемы.
Часто, когда я вижу код с предупреждением «Обнаружен недоступный код», они попадают в одну из следующих категорий:
- Неправильное (на мой взгляд) использование
const
по сравнению с компилятором #define
, где вы в основном говорите компилятору: "Этот код, пожалуйста, скомпилируйте его, , даже когда я знаю, что он не будет использоваться . ".
- Неправильно, как, впрочем, просто неправильно, как в коммутаторе, в котором есть блок-регистр, который содержит как бросок, так и разрыв.
- Остаток кода от предыдущих итераций, когда вы только что замкнули метод, добавив в какой-то момент возврат, не удаляя (или даже не комментируя) следующий код.
- Код, который зависит от некоторых параметров конфигурации (т. Е. Действителен только во время отладочных сборок).
Если ваш код не попадает под одну из вышеуказанных настроек, в каком конкретном случае ваша константа изменится ? Знание этого может дать нам лучшие способы ответить на ваш вопрос о том, как с этим справиться.