defineとプロパティーの使い分け

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

これはあくまでライブラリーを開発する方向けなのだが、何らかの方法で特定の機能を有効化/無効化できるようにする際に、C言語においてはdefineを使う方法とプロパティー ((C/C++ではプロパティーそのものはないので、メンバー変数及びそのアクセサーの総称として言及する)) を使う方法がある。ここではそれぞれのメリットとデメリットについて説明したい。

defineを使う場合

メリット

  • コンパイルレベルで機能の有効化/無効化ができるため、それに伴うレイテンシーがかからないため、パフォーマンスに優れる ((多くの場合、実際には無視できるレベル)) 。
  • 余計な処理がなくなるため、バイナリーサイズが多少小さくなる

デメリット

  • 呼び出し側で機能を有効化/無効化する際にビルドが必要。ライブラリー利用者にとってはライブラリーの差し替えなどが必要になるため、利便性は下がる。あるいはソースコードを提供する必要があるかもしれない。
  • それぞれの処理をdefineとifdefで切り替えるため、可読性が低下する可能性も。

プロパティーを使う場合

メリット

  • 呼び出し側で機能の有効化/無効化を指定できる。したがって、ライブラリーを一つにまとめることが可能であるため、利用者にとっても比較的親切。
  • 通常の条件分岐で処理をするため、可読性の低下は起こりにくい。

デメリット

  • 条件分岐の処理が必要になるため、それに伴うレイテンシーの増大、パフォーマンスの低下が発生する ((当然ながら、多くの場合は実際には無視できるレベル)) 。
  • 条件分岐の処理があるため、バイナリーサイズが若干大きくなる。

最後に

機能の有効化/無効化をする際の方法のメリット、デメリットはこのような感じなのだが、パフォーマンス重視なら前者、移植性重視なら後者になるといったところか。

外部に出すライブラリーであれば、どういう機能を使うかどうか、あるいはその動作を変えたいという可能性が高いので、後者を意識した方が良さそうである。

タイトルとURLをコピーしました