私の質問は再帰についてですが、典型的な場合よりもやや複雑です。通常、再帰関数は、自分自身を呼び出します。functionA
とfunctionB
:function1をfunction2にコールし、function2でfunction1を呼び出すにはどうすればよいですか?
int functionName(int x) {
if (x meets condition) {
return x;
}
else {
x = functionName(x)
}
}
は、しかし、私は2つの機能を持っています。私はfunctionA
がfunctionA
を呼び出すためにfunctionB
とfunctionB
を呼びたい:
int functionA(int x) {
if (x meets condition) {
return x;
}
else {
x = functionB(x)
}
}
int functionB(int x) {
if (x meets condition) {
return x;
}
else {
x = functionA(x)
}
}
私たちは、関数Aが関数Bと関数Bは関数Aの前に定義する必要が前に定義する必要があり、ここでパラドックスのようなものを持っています。私たちは関数のプロトタイプは、関数定義の前に表示されている場合
おそらく、我々は大丈夫でなければなりません:
int functionA(int x); // PROTOTYPE
int functionB(int x); // PROTOTYPE
// [insert definition of functionA here]
// [insert definition of functionB here]
しかし、これらの密接にリンクのプロセスはかなり複雑です。両方の関数を同じファイルの中に入れると、私は「テキスト効果の壁」と呼ぶものを得るでしょう。ファイルはかなり長く、読みにくいでしょう。私は、2つの異なる機能を2つの異なるファイルに入れたいと思っています。しかし、私がこれを行うと、#include
のステートメントとヘッダーファイルについて何をすべきかわかりません。ファイルfunction2.c
に#include function1.h
があり、function1.c
に#include function2.h
がある場合は、円のように見えます。ただ置く
関数プロトタイプを宣言している場合、パラドックスはありません。私はあなたの「コードの壁」発言を理解していないし、別のファイルに関数を分けてコードを読みにくくする理由も理解できない。 –
else節も値を返す必要があります。 – BLUEPIXY
パラドックスはありませんが、デザインを再考し、2つの関数を1つに組み合わせたり、循環参照を避けるように再構成したりすることができます。 – mnistic