首先,我同意你的观点,你需要摆脱所有警告。你得到的每一个小警告,通过解决问题来摆脱它。
在我继续重读之前,看起来像是咆哮,让我强调一下,使用这样的代码似乎没有任何性能损失。使用反射器检查代码后,看起来被“标记”为不可访问的代码实际上并未放入输出程序集中。
但是,它由编译器检查。仅此一项就足以成为无视我的咆哮的充分理由。
换句话说,摆脱该警告的最终效果就是,您摆脱了该警告。
另请注意,此答案是一种意见。你可能不同意我的观点,并想用它#pragma
来掩盖警告信息,但至少对它的作用有一个明智的看法。如果你这样做,谁在乎我的想法。
话虽如此,您为什么要编写无法访问的代码?
您是否使用 consts 而不是“定义”?
警告不是错误。对您来说,这是一个注释,可以分析那段代码并确定您是否做对了。通常,你没有。在您的特定示例中,您故意编译将针对您的特定配置永远不会执行的代码。
为什么代码甚至在那里?它永远不会执行。
您是否对“常量”一词的实际含义感到困惑?常数意味着“这永远不会改变,如果你认为它会改变,它就不是常数”。这就是常数。它不会、也不能、也不应该改变。曾经。
编译器知道这一点,并会告诉你你有代码,由于一个常量,它永远不会被执行。这通常是一个错误。
这个常数会改变吗?如果是,它显然不是一个常量,而是取决于输出类型(Debug、Release)的东西,它是一个“#define”类型的东西,所以删除它,并改用那个机制。这使阅读您的代码的人更清楚地了解此特定代码所依赖的内容。如果您选择了未设置定义的输出模式,Visual Studio 还将有助于将代码灰显,因此代码将无法编译。这就是编译器定义要处理的内容。
另一方面,如果常量不会改变,无论出于何种原因,删除代码,你就不需要它了。
在任何情况下,都不要因为简单的修复而只为那段代码禁用该警告,这就像服用阿司匹林来“修复”你的背痛问题一样。这是一个短期的解决方案,但它掩盖了问题。而是解决根本问题。
为了完成这个答案,我想知道您的问题是否没有完全不同的解决方案。
通常,当我看到带有“检测到无法访问的代码”警告的代码时,它们属于以下类别之一:
const
对编译器的错误使用(在我看来)#define
,你基本上对编译器说:“这段代码,请编译它,即使我知道它不会被使用。”。
- 错了,就像是完全错误的一样,就像一个 switch-case 有一个 case-block 包含一个 throw + a break。
- 以前迭代的剩余代码,您只是通过在某个点添加返回来使方法短路,而不是删除(甚至注释掉)后面的代码。
- 取决于某些配置设置的代码(即仅在调试构建期间有效)。
如果您拥有的代码不属于上述任何设置,那么您的常量会发生变化的具体情况是什么?知道这一点可能会给我们更好的方法来回答您关于如何处理它的问题。