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

时间:2012-02-23 11:29:38

标签: c header circular-dependency

我有循环依赖的代码。

旧的a.h文件:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct {
    b_t *test;
} a_t;

#endif

旧的b.h文件:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct {
    a_t *test;
} b_t;

#endif

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

新的a.h文件:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct b_t b_t;

struct a_t {
    b_t *test;
};

#endif

新的b.h文件:

#ifndef B_H
#define B_H

#include "a.h"

typedef struct a_t a_t;

struct b_t {
    a_t *test;
};

#endif

1 个答案:

答案 0 :(得分:3)

您的方法存在的问题是typedef的{​​{1}}位于a_t,反之亦然。

一种更简洁的方法是将b.h与结构保持一致,并在声明中使用结构标记,如下所示:

A.H

typedef

b.h

#ifndef A_H
#define A_H

struct b_t;

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

#endif