【发布时间】:2018-04-03 08:47:53
【问题描述】:
我的问题是关于递归的,但比典型情况稍微复杂一些。通常,递归函数会调用自身:
int functionName(int x) {
if (x meets condition) {
return x;
}
else {
x = functionName(x)
}
}
但是,我有两个函数:functionA 和 functionB。我想让functionA 打电话给functionB 和functionB 打电话给functionA:
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)
}
}
这里有个悖论,functionA需要在functionB之前定义,而functionB需要在functionA之前定义。
大概,如果我们有函数原型出现在函数定义之前,我们应该没问题:
int functionA(int x); // PROTOTYPE
int functionB(int x); // PROTOTYPE
// [insert definition of functionA here]
// [insert definition of functionB here]
然而,这些密不可分的过程相当复杂。如果我们将两个函数放在同一个文件中,我们将得到我所说的“文字墙效果”。该文件将相当长且难以阅读。我很想把这两个不同的函数放到两个不同的文件中。但是,如果我这样做,我不确定如何处理 #include 语句和头文件。如果文件function2.c 有一个#include function1.h 并且function1.c 有一个#include function2.h,这似乎是一种循环。
【问题讨论】:
-
如果你已经声明了函数原型,那就没有悖论了。我不明白你的“代码墙”言论,以及为什么要将函数分成不同的文件,使代码更难阅读。
-
else 子句也必须返回一个值。
-
没有悖论,但您可能需要重新考虑设计并将这两个功能合二为一,或者重新构造它们以避免循环引用。
标签: c function include header-files definition