define か const か?

Objective-C を書いていてたまに気になるのが、タイトルの件。
定数を使用するときに、 define を使うべきか、 const を使うか。

Objective-C でどうするのがよいか、というのはあまり見つけられなかったが、C++ ではおおよそ、const を推奨しているようです。
理由を見ると、Objective-C でも同様に const を使用した方がよさそうですね。

主な理由は以下の4点

  • 型がはっきりする
  • 名前空間の問題
  • 変更不可にするため
  • 間違い防止
型がはっきりする

define だと、型が無いため、なんにでも代入可能になってしまう。const で明示した方が安全。

名前空間の問題

const では スコープが決められるため重複の心配が少ない。また、内部仕様変数のアクセス制限もかけられる。defineではグローバルスコープになってしまうため影響範囲が大きくなる心配がある。

変更不可にするため

define で定義した物は undef などで上書きされる可能性もある。

間違い防止

defineで展開した結果、計算順序の優先度で意図しない展開になることを防ぐ。

    • -

ちなみに、フラグとして定数を使う場合は enum がありますが、上記の二番目、名前空間の問題を考えると const のほうがいいのかもしれない。が、数が多いと enum のほうが便利だよなぁ。


参考:http://www.geocities.jp/ky_webid/cpp/language/020.html