gpt4 book ai didi

c - 让 function1 调用 function2 并让 function2 调用 function1 的干净方法是什么?

转载 作者:行者123 更新时间:2023-11-30 19:32:39 25 4
gpt4 key购买 nike

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

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)
}
}

这里有一种悖论,函数A需要在函数B之前定义,而函数B需要在函数A之前定义。

据推测,如果函数原型(prototype)出现在函数定义之前,应该没问题:

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 看起来有点循环。

最佳答案

只需将包含防护放在 header 中并将其包含在您需要的所有 .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

稍后您可以在file1.cfile2.c...file100中执行#include "header.h" .c 等,不会有任何冲突。

关于c - 让 function1 调用 function2 并让 function2 调用 function1 的干净方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46878601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com