使struct不在其他文件可访问的头文件中

时间:2017-02-15 19:59:56

标签: c struct

在C语言中,假设我在文件gulp.start中定义struct s。我不希望其他人访问此f.c,因此我不会将其放在struct中。在我的项目中,我还有许多其他文件,包括f.h,希望访问g.c中的struct s

有没有办法让这成为可能?我认为f.c必须是s中声明的全局extern变量。他们会在编译期间链接。我不确定这是否可行,或者是否正确/最好的方式来做这样的事情。

2 个答案:

答案 0 :(得分:4)

您可以向头文件添加类型的前向声明,并且可以将其视为不透明(不完整)类型。

struct s;

其他人现在可以引用struct s *,但他们无法使用struct s,因为该类型不完整。

如果您提供API,他们可以调用API来创建,修改和销毁struct s的实例。

enum struct_s_field {
    S_FIELD_NAME,
    S_FIELD_VALUE,
    /* ... */
};

struct s * make_s ();
void unmake_s(struct s *);
void update_s(struct s *, enum struct_s_field, ...);

答案 1 :(得分:1)

执行此操作的一种方法是在f.c中创建初始化,读取和写入struct s结构的API。要从调用者隐藏此结构的内容,请将void *返回给它在后续调用f.c API时使用的调用者。

例如:

void *pS;

pS = sInit();

void *sInit(void)
{
    return malloc(sizeof(struct s));
}