2016-02-12 5 views
7

警告到達不能コード:私はコードが到達不能であることを第二のreturn文に警告を取得しています以外の#if DEBUGと返す文 - 私はこのコードの小さな作品に直面しています

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

それは、正常に動作します。この警告にもかかわらず、リリースモードでプログラムを実行すると、コードは実際に非常に到達可能です。

なぜこの警告が表示されますか?

+0

現時点でどのソリューション構成でVisual Studioを使用していますか? – Maarten

+0

リリースに入れたときに消えてしまう –

+4

2度戻る前に#elseを追加し、 –

答えて

13

DEBUGシンボルが定義されているビルドを実行している場合、コンパイラはコードの静的解析を実行して、と仮定して最初のリターンが有効になり、除外されません。第二return文は、このようなビルドに到達することはないだろう明らかであるその意味で

return thisVariable; 
return thatVariable; 

:だからあなたのコードでは、と見られます。 DEBUGが定義されていないビルド構成に切り替えると、警告が表示されません。

#elsedocs)を使用すると、DEBUGが定義されているときの第2のreturnステートメントが回避されます。

hereからこの関連ちらほらもあります:

コンパイラは別のプリプロセッサを持っていませんが、1があったかのように、この[C#プリプロセッサディレクティブ]セクションに記載 ディレクティブは を処理しています。

つまり、C#コンパイラの静的解析では、プリプロセッサディレクティブは認識されません。それらはすでにその時点で処理されており、静的解析ではというコードが前処理フェーズのというコードのみが表示されます。

+1

ありがとう! 2番目のreturn文に#elseを使用し、#endifをその下に置くと警告が取り除かれました。 – Richnau

関連する問題