HOME » Natsu note » iOS » Xcode » [紹介] Objective-C警告タイプのまとめ

[紹介] Objective-C警告タイプのまとめ 2013/05/11/|iOS » Xcode,

アプリ開発時に最も苦労するのは何でしょう。多くの人がバグ取りとテストに時間を取られているのではないでしょうか。本来であれば、多くの時間はバグ取りではなく設計に費やしたいところです。

そこで役立つのがコンパイル時の警告。たかが警告、されど警告。あなどれません。ここには非常に多くのヒントが隠されています。私自身、常に警告はゼロにしていますが、コンパイルオプションを変えるとまだまだほかの警告が出てきます。

この警告レベルについて、非常に分かりやすくまとめられている記事がありました。

Compiler Warnings for Objective-C Developers – Ole Begemann

http://oleb.net/blog/2013/04/compiler-warnings-for-objective-c-developers/

以下、概要のみまとめます。

3つの警告レベルオプション

Xcodeのプロジェクトにてデフォルトで有効になっている警告はごく一部です。これは、プロジェクトのBuild Settingsにある”Apple LLVM Compiler 4.2 Warnings – Objective C”を参照すればわかります。ここで、一つずつ設定をOn/Offしてもいいですが、もっと便利なのがコンパイルオプションを使うことです。

コンパイルオプションで警告レベルを変更するためには、Other C Flagsに”-W…”の設定を追加します(詳細は元記事参照)。

警告レベルを示すコンパイルオプション(”-W…”で指定)には、以下の3通りがあります。

  • -Wall
  • -Wextra
  • -Weverything

ここで注意したいのが、-Wallは全ての警告を表示するわけではないということです。-Wallが対象としているのは、主な警告のうち誤指摘(警告内容が無視して問題ないもの)になりにくいもののセットのようです。例えば、符号あり/なしの値を比較した場合に表示される警告”-Wsign-compare”は(これは無視しても問題がない場合がほとんど)、-Wallのセットではなく、-Wextraのセットに含まれとのことです。

どのセットを使うか?

では、まずはどの警告セットを有効にするべきなのでしょうか。本記事の中では、”-Wall”と”-Wextra”を用いることを推奨しています。既存プロジェクトは別として、新規プロジェクトでは確かにこのくらいから初めてもいいのかもしれません。

開発を進めていくにあたり、この警告は無視して問題ないと判断した場合、#pragmaを使って除外することが可能です。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsign-compare"
#pragma clang diagnostic pop

なお、それぞれの警告がどのような名前を持つかは、Xcodeのビルドログを見ると分かります。[-W…]と書かれているものが警告名になります(詳細は元記事参照)。

開発に慣れていない初心者の方こそ、警告レベルをあげておくとよいのではないでしょうか。デバッグ作業は理論ではなく、「経験」と「勘」が大きな役割を果たします。そのため、経験が浅ければ浅いほど難しくなってくるでしょう。バグ取りではなく、バグを入れないことに注力した方が作業がスムーズに進むはずです。google先生に聞く前に、警告レベルをあげてみてはいかがでしょうか。

関連サイト

Clang Compiler User’s Manual – Clang 3.4 documentation