#if DEBUG和return语句 - 无法访问的代码警告

时间:2016-02-12 13:29:49

标签: c# visual-studio-2015 c-preprocessor compiler-warnings

我正面对这段代码:

#if DEBUG
return thisVariable;
#endif
return thatVariable; //<-- warning CS0162 here

它工作正常,除了我在第二个返回语句上收到代码无法访问的警告。尽管有警告,但在发布模式下运行程序时,代码实际上是非常容易的。

为什么我收到这个警告?

1 个答案:

答案 0 :(得分:13)

如果您正在执行定义了DEBUG符号的构建,那么编译器正在执行代码的静态分析,假设第一次返回有效且不排除。所以你的代码将被视为:

return thisVariable;
return thatVariable;

在这种情况下,很明显第二个return语句在这样的构建中无法实现。当您切换到未定义DEBUG的构建配置时,您不应该看到警告。

在定义DEBUG时,请考虑使用#elsedocs)来避免第二个return语句。

还有来自here的这个相关信息:

  

虽然编译器没有单独的预处理器,但是   本[C#预处理器指令]部分中描述的指令是   处理好像有一个。

换句话说,C#编译器的静态分析不知道预处理器指令;它们已经在那时处理过了,静态分析只能看到从预处理阶段产生的代码。