переопределение typedef

Я, возможно, делаю это неправильно, и это очень вопрос, почему оно работает в одном компиляторе, а не в другом.

У меня есть большое приложение на C, и я стараюсь придерживаться стиля, не включающего файлы заголовков из других файлов заголовков. Вместо этого, используя форвардные объявления; Таким образом, я пытаюсь сделать следующее.

// in A.h
typedef struct A_ A;
typedef struct B_ B;
struct A_ {
    double a;
    B *b;
};

// in B.h
typedef struct B_ B;
struct B_ {
    int c;
};

// in C.h
typedef struct A_ A;
typedef struct B_ B;
void function_do_something(A*, B*);

// in C.c
#include "A.h"
#include "B.h"
#include "C.h"
void function_do_something(A* a, B* b) {
    ...
}

Эта парадигма компилируется и работает в Ubuntu 11.10 gcc - но она дает ошибки компилятора в OpenSUSE gcc, которые говорят «переопределение typedef».

Я занимался разработкой в ​​Убунуту и ​​поэтому не осознавал, что эта парадигма может быть неверной. Это просто неправильно и gcc Ubuntu слишком хорош?

19
задан BrT 3 December 2011 в 12:51
поделиться