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

#c

#c

Вопрос:

У меня есть структура, которая перенаправляется в 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:

Это называется непрозрачным 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));