这是解决循环 typedef 依赖的正确方法吗?

发布于 2025-01-08 00:01:48 字数 632 浏览 0 评论 0原文

我有具有循环依赖的代码。

旧的 ah 文件:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct {
    b_t *test;
} a_t;

#endif

旧的 bh 文件:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct {
    a_t *test;
} b_t;

#endif

我只是想知道我的解决方案是否是解决该问题的“正确方法”。我想要生成漂亮且清晰的代码。

新的 ah 文件:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct b_t b_t;

struct a_t {
    b_t *test;
};

#endif

新的 bh 文件:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct a_t a_t;

struct b_t {
    a_t *test;
};

#endif

I have code with circular dependency.

old a.h file:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct {
    b_t *test;
} a_t;

#endif

old b.h file:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct {
    a_t *test;
} b_t;

#endif

I've just wanted to know if my solution is "proper way" to solve that problem. I want produce nice and clear code.

new a.h file:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct b_t b_t;

struct a_t {
    b_t *test;
};

#endif

new b.h file:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct a_t a_t;

struct b_t {
    a_t *test;
};

#endif

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我也只是我 2025-01-15 00:01:48

您的方法的一个问题是 a_ttypedef 位于 bh 中,反之亦然。

一种更简洁的方法是将您的 typedef 与结构一起保留,并在声明中使用结构标签,如下所示:

ah

#ifndef A_H
#define A_H

struct b_t;

typedef struct a_t {
    struct b_t *test;
} a_t;

#endif

bh

#ifndef B_H
#define B_H

struct a_t;

typedef struct b_t {
    struct a_t *test;
} b_t;

#endif

A problem with your approach is that the typedef for a_t is in the b.h, and vice versa.

A somewhat cleaner way would be to keep your typedef with the struct, and use structure tags in the declarations, like this:

a.h

#ifndef A_H
#define A_H

struct b_t;

typedef struct a_t {
    struct b_t *test;
} a_t;

#endif

b.h

#ifndef B_H
#define B_H

struct a_t;

typedef struct b_t {
    struct a_t *test;
} b_t;

#endif
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文