【发布时间】:2021-12-31 21:57:41
【问题描述】:
我有一个非常简单的问题。 如果我有这样的源代码文件:
#include<stdio.h>
#include"example.h"
struct mystructure{
//Data Variables
int a;
};
int main(){
mystructure somename;
somename.a = 1;
printf("%d\n", somename.a);
return 0;
}
使用这样的头文件:
#ifndef EXAMPLE_HEADER_H
#define EXAMPLE_HEADER_H
// Opaque declaration.
struct mystructure;
typedef struct mystructure mystructure;
#endif
代码可以正常编译。我也可以在头文件中定义结构,它会编译得很好。
但是,如果我在不同的源代码文件中定义结构并尝试使用主源代码文件编译它,它将不断抛出有关前向声明的错误。
有没有办法在源代码文件中定义结构,在头文件中给它一个 typedef 并在其他源文件的其他地方使用它?
我一直在通过在头文件中定义结构来做这件事,但我想知道如何以更不透明的方式做到这一点。
【问题讨论】:
-
结构体需要在表头中。唯一的选择是通过提供一堆函数来操作不透明的指针。一个分配一个对象并给出一个指针,另一个销毁它,以及访问每个需要公开的成员,等等。
-
如果多个文件需要访问不透明类型的内部,那么您可以有一个声明不透明类型的公共头和一个定义结构的私有头。特权代码包括私有标头;非特权代码使用公共标头中声明的设施,它必须提供一般用户对不透明类型的实际数据所需的任何访问权限。私有标头应该包含公共标头以确保事情保持同步——然后特权代码只包含私有标头。
-
这很有趣。我将不得不阅读更多相关信息:关于私人标题here 的帖子
标签: c struct definition opaque-types