有什么干净的方法让function1调用function2并让function2调用function1?

时间:2017-10-22 20:02:11

标签: c function include header-files definition

我的问题是关于递归,但比典型案例稍微复杂一些。通常,递归函数会调用自身:

int functionName(int x) {
    if (x meets condition) {
        return x;
    }
    else {
        x = functionName(x)
    } 
}

但是,我有两个功能:functionAfunctionB。我希望functionA致电functionBfunctionB致电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.hfunction1.c#include function2.h,那么它似乎是圆形的。

1 个答案:

答案 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进行操作,并且不存在任何冲突。