Это правильный способ разрешить циклическую зависимость typedef? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть код с круговой зависимостью.

старый ах файл:

#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

Я просто хотел узнать,мое решение - «правильный путь» для решения этой проблемы.Я хочу создать красивый и понятный код.

новый ах файл:

#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

1 Ответ

3 голосов
/ 23 февраля 2012

Проблема с вашим подходом состоит в том, что typedef для a_t находится в b.h, и наоборот.

Несколько более чистым способом было бы сохранить typedef со структурой и использовать теги структуры в объявлениях, например:

хиджры

#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
...