Next: , Previous: Guidelines, Up: Writing Test Programs


6.2.2 関数のテスト

テストプログラムでの関数宣言には,C++に対する条件付のプロトタイプを持た せるべきです.しかし,テストプログラムで引数をとる関数が必要になることは, 実際には滅多にありません.

     #ifdef __cplusplus
     foo (int i)
     #else
     foo (i) int i;
     #endif

テストプログラムが宣言する関数には,‘extern "C"’プロトタイプを要求 するC++に対する条件付けも行なうべきです.壊れたプロトタイプを含んでいる ヘッダファイルをインクルードしていないことを確かめてください.

     #ifdef __cplusplus
     extern "C" void *malloc (size_t);
     #else
     void *malloc ();
     #endif

テストプログラムが(その存在の確認のためにだけ)無効なパラメータで関数を呼 び出す場合,その関数を決して呼び出さないことを保証するようにプログラムを 構成してください.決して呼び出されないそれ以外の他の関数から関数を呼び出 すことで,こうすることが可能です.GCCバージョン2は,exit は値を返 さず,同じブロックにあるそれ以降のコードを最適化で外してしまうことが知ら れているので,exitの呼び出し以降にそれを書き込まないでください.

ヘッダファイルをインクルードする場合は,たとえ引数が0だけであっても,プ ロトタイプで生じるコンパイルエラーを避けるため,正しい数の引数を適切にし て関数を呼び出していることを確認してください.GCCのバージョン2は,自動的 にインライン化される関数プロトタイプ,例えばmemcpyもあります.そ れらを調査しているときのエラーを避けるため,正しい数の引数を与えるか, (charのような)異なる戻り値で再定義してください.