我似乎无法正确编译这个递归函数,我也不知道为什么。
代码如下:
void point_forward (mem_ptr m) {
mem_ptr temp;
temp = m->next;
if (temp->next != NULL) point_forward(temp);
m->next = temp->next;
}
我的编译器返回这个:
mm.c:134:6:警告:“point_forward”的类型冲突[默认启用]
mm.c:96:2:注意:之前的“point_forward”隐式声明在这里
关键就在这:
以前的隐式声明“point_forward”的位置在这里
在第 96 行你有:
point_forward(m); // where m is a mem_ptr;
由于编译器还没有看到函数声明point_forward(m)
,它“隐式定义”(即假设)一个返回 int 的函数:
int point_forward(mem_ptr m);
这与后面的定义相冲突:
void point_forward (mem_ptr m) {
要解决此问题,您可以:
在第 96 行之前放置一个显式声明:void point_forward(mem_ptr m);
这将告诉编译器如何处理point_forward()
当它在第 96 行看到它时,即使它还没有看到函数实现。
或者,在第 96 行上方定义整个函数(将函数定义从第 134 行向前移动到第 96 行上方)。
这里有一点点有关声明函数的更多信息 http://opencbp.sourceforge.net/en_US.ISO8859-1/books/opencbook/func.prototypes.html.
一般来说,对于风格,我会:
-
如果你不想使用point_forward()
在任何其他 C 文件中,完整定义它:
static void point_forward(mem_ptr m) { ..function body goes here.. }
在源文件的顶部。
-
如果你想使用point_forward()
在其他C文件中,提出前向声明:
void point_forward(mem_ptr m);
在头文件中以供其他文件包含。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)