Как объявить структуру определения типа экстерна?

У меня есть два 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’

6
задан Framester 12 July 2010 в 10:29
поделиться

3 ответа

Ответ заключается в том, что он есть, и вместо него следует использовать заголовочный файл. Вы можете скопировать определение структуры typedef struct BAR_{...}bar; в test_foo.c и это будет работать. Но это приводит к дублированию. Каждое работающее решение должно сделать реализацию struct доступной компилятору в test_foo.c. Вы также можете использовать ADT, если это вам подходит в данном случае.

6
ответ дан 9 December 2019 в 22:28
поделиться

Отбросьте 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 ничего не знает о содержимом объект.

4
ответ дан 9 December 2019 в 22:28
поделиться

Вам придется добавить определение BAR в test_foo.c. Предпочтительнее ли это дублирование, чем заголовок - решать вам.

1
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: