我在头文件中定义了一个结构,如下所示:
typedef struct {
void *data;
} point;
我想防止其他人直接访问*数据,所以我想我应该在.c文件中声明结构,并在头文件中使用类似extern typedef struct point;
的内容。然而,这并不起作用。
实现这一目标的最好方法是什么?
发布于 2011-03-20 11:06:41
在您的(公共)头文件中:
typedef struct point point;
在.c
文件中:
struct point
{
void *data;
};
请注意,您的代码用户将不再能够在堆栈上创建point
,因为编译器不知道它有多大。您可能需要提供一个point_create()
函数来分配内存并将其地址返回给调用者。
发布于 2011-03-20 11:06:37
这是指向实现或pimpl惯用法的指针。有关C++的教程,请参阅http://en.wikibooks.org/wiki/C++_Programming/Idioms#Pointer_To_Implementation_.28pImpl.29,但这个想法也应该适用于C语言。
发布于 2011-03-20 11:20:37
typedef struct {
/* private members; don't access directly */
void *data;
} point;
https://stackoverflow.com/questions/5368028
复制相似问题