テストプログラムでの関数宣言には,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
のような)異なる戻り値で再定義してください.