如何在另一个.c文件中使用前向声明的struct数据?

时间:2019-04-11 09:03:51

标签: 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中定义结构,我没有任何问题。我可以在file2中使用val吗?

1 个答案:

答案 0 :(得分:4)

这称为不透明struct,在您要保护对成员的访问(一种私有说明符)时很有用。

通过这种方式,只有file1.c可以访问struct的成员,以使其对您需要的其余.c文件可见

1)在.h文件中定义struct

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));