我有两个头文件:
src/util/buffer.h
:
//Namespace Src Util Buffer sub
struct sub_buffer{
size_t size;
void *buf;
};
//tons of static inline functions
src/lib_context.h
:
//Namespace Src Lib Context slc
typedef struct sub_buffer slc_buffer; // Is this typedef ok?
struct slc_context{
//definition
};
void slc_set_buffer(slc_buffer *buf_ptr);
//tons of other structs and functions
我不确定的是typedef struct sub_buffer slc_buffer;
。有一个选择包括src/util/buffer.h
,但这将导致紧密耦合到标题,并且更难以用例如替换它。另一个包含灵活数组成员的缓冲区
将这样的typedef
引入到另一个头文件中定义的结构是常见的,因此当包含头部(但不包括一个头到另一个头文件)时,它的实现将在c
文件中提供吗?
不,那将是一个错误。
你可能意味着
typedef struct sub_buffer slc_buffer;
在这种情况下它很好,你总是可以将typedef别名引入类型,即使没有在你所在的范围内定义那些类型。
这就是经典的自引用“节点”工作的原因:
typedef struct node node;
struct node {
node *next;
void *data;
};
注意如何在第一行使用未知类型的typedef
。