Я, возможно, делаю это неправильно, и это вопрос о том, почему он работает в одном компиляторе, а не в другом.
У меня есть большое приложение 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".
Я делаю свое развитие в Ubunutu и поэтому не понял, что эта парадигма может быть неправильной. Разве это просто неправильно, и Ubuntu gcc слишком хорош?