在C中是否存在"使结构直接无法访问"的术语?

Jeo*_*eon 3 c struct

我在hostap中找到了一些代码.以下是简化的:

a.h

// it just declares 'there is a struct a'
struct a;

// it seems like an accessor to a private member b
int get_b(struct a);
Run Code Online (Sandbox Code Playgroud)

a.c

// definition is seprated from a header file
struct a {
    int b;
};

int get_b(struct a) {
    return a.b;
}
Run Code Online (Sandbox Code Playgroud)

a.o使用这两个文件生成目标文件.

如果其他源代码想要使用struct a,则无法直接访问成员b,并且编译器会抱怨dereferencing incomplete type.我只能访问一个成员bget_b().

第一次,我对这种模式感到非常沮丧.但最后,我觉得如果有人想要保护其完整性,这是一个设计良好的模式struct a(例如,成员的价值观必须按照某些标准设定,或者成员彼此依赖,以便一个成员的变化会影响其他)

这种模式有术语吗?

dbu*_*ush 7

这被称为不透明类型.你知道一个特定的struct存在,但没有别的.

因为您对opaque结构的内容一无所知,所以如果它不能创建实例.但是,您可以创建指向它的指针.

你给的例子是行不通的,因为你需要传递的一个实例struct aget_b了,你不能创建的实例struct a.但是如果函数采用指针,你可以这样做:

int get_b(struct a *sa)
{
    return sa->b;
}
Run Code Online (Sandbox Code Playgroud)

您还需要一个类似构造函数的函数来创建实例,因为外部模块将无法执行此操作:

struct a *create(int b)
{
    struct a *tmp = malloc(sizeof(struct a));
    tmp->b = b;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

然后你的标题将包含:

struct a;

int get_b(struct a *);
struct a *create(int);
Run Code Online (Sandbox Code Playgroud)