Code will never be executed
という警告エラーが稀に発生してしまうことがある。
if (false) {
print("hello"); // Code will never be executed
}
if (-1u < 0) {
print("hello"); // Code will never be executed
}
if文の条件式が常に偽(false)になるようなコードを書いてしまうと、このような警告が発生する原因となる。
これらは到達不能コード/デッドコードと呼ばれており、多くのコンパイラはこのようなコードを親切に警告してくれる。
なお本警告は、正確にはエラー(error)文ではなく警告(warning)文であるため、コンパイル自体は通ってしまう。
意図的な処理ではない場合の対処方法
Code will never be executed
が発生したコードのブロックは実行されなくなるため、本警告が発生した場合には何かしら対処が必要になる。自身の書いた式をしっかりと見直す必要がある。
符号なし型と符号付き型同士の比較処理等が行われていないかや、演算子の優先順位がきちんと明示されているかどうか等にも注意する。
意図的な処理の場合の警告回避方法
条件式内のリテラルを括弧で二重に囲うことで、コンパイラ側の警告を抑止することができる。
if ((false)) {
print("hello"); // 警告は発生しない
}
if (false) {
print("hello"); // Code will never be executed
}
また意図的なコードであることを明示するために/* DISABLES CODE */
コメントを用いることも有効である。
if (/* DISABLES CODE */ (0));
if (0), if (false) 処理の意味
if (0)
やif (false)
記法は、ブロック文のコメントアウトを実現するテクニックとして利用されることがある。
if (false) {
// 本ブロック内の処理は実行されない
}
if (true) {
// 本ブロック内の処理は実行される
}
参考: if false コメントアウト・イディオム
個人的な開発やデバッグ用途での利用が想定される。