gpt4 book ai didi

gcc - 防止递归 C#include

转载 作者:行者123 更新时间:2023-12-04 09:33:46 24 4
gpt4 key购买 nike

我大致了解#include 对 所做的规则C 预处理器,但我不完全理解它。现在,我有两个头文件,Move.h 和 Board.h,它们都定义了各自的类型(Move 和 Board)。在这两个头文件中,我需要引用另一个头文件中定义的类型。

现在我在 Board.h 中有 #include "Move.h",在 Move.h 中有 #include "Board.h"。但是当我编译时,gcc 会翻转并给我一个很长的(看起来像无限递归)错误消息在 Move.h 和 Board.h 之间翻转。

如何包含这些文件,以便我不会无限期地递归包含?

最佳答案

您需要查看远期申报 ,您已经创建了包含的无限循环,前向声明是正确的解决方案。

下面是一个例子:

移动.h

#ifndef MOVE_H_
#define MOVE_H_

struct board; /* forward declaration */
struct move {
struct board *m_board; /* note it's a pointer so the compiler doesn't
* need the full definition of struct board yet...
* make sure you set it to something!*/
};
#endif

Board.h
#ifndef BOARD_H_
#define BOARD_H_

#include "Move.h"
struct board {
struct move m_move; /* one of the two can be a full definition */
};
#endif

主文件
#include "Board.h"
int main() { ... }

注:每当您创建“板”时,您都需要执行以下操作(有几种方法,这是一个示例):
struct board *b = malloc(sizeof(struct board));
b->m_move.m_board = b; /* make the move's board point
* to the board it's associated with */

关于gcc - 防止递归 C#include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045159/

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