0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

XCode 12 Warning Error|Will never be executed

Posted at

はじめに

警告が気になる、、、

って時にどうぞ

環境

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 がついている部分は
警告エラー はついた状態でした。

バージョンによってはここを読まないように設定できるみたいですが
わかる方がいたら教えてください。

#最後に

なるべく黄色いエラーを消したい衝動に駆られてしまいますがまたさまざまなエラーに対しても記事として残していくのでどうぞよろしくお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?