私は最近、関数名がヘッダーファイルとCファイルで複数回宣言されているCソースに出くわしました。関数を何度も宣言することで間違いではないことはわかっていますが、私の質問は、なぜ関数を何度も宣言する必要があるのかということです。
6 に答える
すべきではありません。悪いコーディング。これらの宣言はすべて一致する必要があります。一致しない場合、コンパイルエラーが発生します。
int 以外の値 (double など) を返す関数の場合、呼び出し元の関数は、呼び出された関数の戻り値の型を認識している必要があります。それ以外の場合、戻り値の型は int と見なされますが、情報が失われる可能性があります (double から int など)。
この情報の損失を防ぐ 1 つの方法は、呼び出しルーチンで関数を明示的に宣言することです。これは、同じ関数の宣言が非常に多いことに気付いた理由を説明している可能性があります。
微妙な副作用のために、関数を再宣言 (または再定義) すると便利な場合があります。ここの最後の段落に、インライン関数に関する一例を示します。
おそらく、宣言の一部は条件付き定義ブロック内にあり、さまざまな状況で使用される可能性があります。
#ifdef USE_ALT_FUNCS
myfunc(type1 t);
#else
myfunc(type2 t);
#endif
しかし、これはメンテナンスの頭痛の種になるので、まだ良い考えではありません。
よくわかりませんが、演算子のオーバーロード、ポリモーフィズム、またはメソッドのオーバーロードを使用しているため、関数を何度も宣言している可能性があります。あなたの場合は、メソッドのオーバーロードまたは操作のオーバーロードだと思います。
私の英語で申し訳ありませんが、正しい名前は「関数のオーバーロード」だと思います。参考になれば幸いですが、例を示していただけると助かります。