У меня есть два c файла, foo.c с функциональностью и test_foo.c, которые тестируют функции foo.c.
Есть ли способ получить доступ к определению типа структуры BAR
Я определил в foo.c в test_foo.c, не используя заголовочный файл? До сих пор я смог избежать h файла так, чтобы целая программа состояла из foo.c.Спасибо.
foo.c
typedef struct BAR_{...} bar;
BAR *bar_new(...) {..}
test_foo.c
extern BAR *bar_new(...)
error: expected declaration specifiers or ‘...’ before ‘BAR’
Ответ заключается в том, что он есть, и вместо него следует использовать заголовочный файл.
Вы можете скопировать определение структуры typedef struct BAR_{...}bar;
в test_foo.c
и это будет работать. Но это приводит к дублированию.
Каждое работающее решение должно сделать реализацию struct доступной компилятору в test_foo.c
.
Вы также можете использовать ADT, если это вам подходит в данном случае.
Отбросьте typedef.
В foo.c:
struct bar
{
...
};
struct bar *bar_new(....)
{
return malloc(sizeof(struct bar));
}
В test_foo.c:
struct bar;
struct bar *mybar = bar_new(...);
Обратите внимание, что вы только таким образом получаете информацию о существовании объекта struct bar, пользователь в test_foo.c ничего не знает о содержимом объект.
Вам придется добавить определение BAR в test_foo.c. Предпочтительнее ли это дублирование, чем заголовок - решать вам.