Как использовать заранее объявленные данные структуры в другом файле .c? - PullRequest
3 голосов
/ 11 апреля 2019

У меня есть структура, которая заранее объявлена ​​в file.h. Структура определена в file1.c. Я пытаюсь использовать структуру в file2.c. Но это дает мне «ошибку: разыменование указателя на неполный тип» в file2.c.

file.h

typedef struct foo foo;

file1.c

#include <file.h>

typedef struct foo {
   int val;
} foo;

file2.c

#include <file.h>

struct foo *f;
.
.
.
printf("%d", f->val);   <--Error here

У меня нет проблем, если я определю структуру в file.h. Есть ли способ использовать val в file2?

1 Ответ

4 голосов
/ 11 апреля 2019

Это называется непрозрачным struct, полезно, когда вы хотите защитить доступ к членам (своего рода закрытый спецификатор).

таким образом, только file1.c может получить доступ к членам struct, чтобы сделать его видимым для остальных .c файлов, необходимых для

1) Определите struct внутри .h файла

или

2) Доступ к членам через функцию:

//file.h

typedef struct foo foo;
int foo_val(const foo *);

//file1.c

#include "file.h" // Always prefer "" instead of <> for local headers

struct foo { // Notice that you don't need to retypedef the struct
   int val;
};

int foo_val(const foo *f)
{
    return f->val;
}

//file2.c

#include "file.h"

struct foo *f;

printf("%d", foo_val(f)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...