注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。
これはあくまでライブラリーを開発する方向けなのだが、何らかの方法で特定の機能を有効化/無効化できるようにする際に、C言語においてはdefineを使う方法とプロパティー ((C/C++ではプロパティーそのものはないので、メンバー変数及びそのアクセサーの総称として言及する)) を使う方法がある。ここではそれぞれのメリットとデメリットについて説明したい。
defineを使う場合
メリット
- コンパイルレベルで機能の有効化/無効化ができるため、それに伴うレイテンシーがかからないため、パフォーマンスに優れる ((多くの場合、実際には無視できるレベル)) 。
- 余計な処理がなくなるため、バイナリーサイズが多少小さくなる
デメリット
- 呼び出し側で機能を有効化/無効化する際にビルドが必要。ライブラリー利用者にとってはライブラリーの差し替えなどが必要になるため、利便性は下がる。あるいはソースコードを提供する必要があるかもしれない。
- それぞれの処理をdefineとifdefで切り替えるため、可読性が低下する可能性も。
プロパティーを使う場合
メリット
- 呼び出し側で機能の有効化/無効化を指定できる。したがって、ライブラリーを一つにまとめることが可能であるため、利用者にとっても比較的親切。
- 通常の条件分岐で処理をするため、可読性の低下は起こりにくい。
デメリット
- 条件分岐の処理が必要になるため、それに伴うレイテンシーの増大、パフォーマンスの低下が発生する ((当然ながら、多くの場合は実際には無視できるレベル)) 。
- 条件分岐の処理があるため、バイナリーサイズが若干大きくなる。
最後に
機能の有効化/無効化をする際の方法のメリット、デメリットはこのような感じなのだが、パフォーマンス重視なら前者、移植性重視なら後者になるといったところか。
外部に出すライブラリーであれば、どういう機能を使うかどうか、あるいはその動作を変えたいという可能性が高いので、後者を意識した方が良さそうである。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。