我的问题是关于递归,但比典型案例稍微复杂一些。通常,递归函数会调用自身:
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
,那么它似乎是圆形的。
答案 0 :(得分:0)
只需在标题中添加包含警戒并将其包含在您需要的所有.c
个文件中:
// header.h
#ifndef HEADER_H
#define HEADER_H
int functionA(int x); // PROTOTYPE
int functionB(int x); // PROTOTYPE
#endif
或者只是使用它:
#pragma once
int functionA(int x); // PROTOTYPE
int functionB(int x); // PROTOTYPE
稍后您可以在#include "header.h"
,file1.c
... file2.c
等中file100.c
进行操作,并且不存在任何冲突。