はじめに
警告が気になる、、、
って時にどうぞ
環境
Swift
XCode 12.5.1
本題
will never be executedという警告エラーが稀に発生してしまいます。
if (false) {
print("hello"); // warning : will never be executed
}
if文の条件式が常に偽(false)になるようなコードを書いてしまうと、このような警告が発生する原因となる。
こういう場合において、到達不能コード/デッドコードと呼ばれており、多くのコンパイラはこのようなコードを親切に警告してくれます。
この警告は、正確にはエラー(error)文ではなく警告(warning)文であるため、コンパイル自体は通ってしまいます。
意図的な処理ではない場合の対処方法
will never be executedが発生したコードのブロックは実行されなくなるため、この警告が発生した場合には何かしら対処が必要になる。自分で書いた条件式をしっかりと見直す必要があります。
符号なし型と符号付き型同士の比較処理等が行われていないかや、演算子の優先順位がきちんと明示されているかどうかなどについても注意が必要になります。
意図的な処理の場合の警告回避方法
条件式内のリテラルを括弧で二重に囲うことで、コンパイラ側の警告を抑止することができる。
/* DISABLES CODE
if (false) {
print("hello"); // will never be executed
}
*/
また意図的なコードであることを明示するために DISABLES CODE を書いてコメントを用いることも有効ですね。
余談ですが
if ((/* DISABLES CODE */ (0)) != 0) {
// will never be executed
}
if ((0) != 0) {
// will never be executed
if (/* DISABLES CODE*/false) {
// 処理の意味
// will never be executed
}
}
let i = 0
if (i == 0) {
}
if (/* DISABLES CODE*/false) {
// 記法は、ブロック文のコメントアウトを実現するテクニックとして利用されることがある。
// will never be executed
}
if (/* DISABLES CODE*/false) {
// 本ブロック内の処理は実行されない
// will never be executed
}
if (true) {
// 本ブロック内の処理は実行される
}
上記の記載ですと、// will never be executed がついている部分は
警告エラー はついた状態でした。
バージョンによってはここを読まないように設定できるみたいですが
わかる方がいたら教えてください。
#最後に
なるべく黄色いエラーを消したい衝動に駆られてしまいますがまたさまざまなエラーに対しても記事として残していくのでどうぞよろしくお願いいたします。