我有两个头文件:
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
文件中提供到另一个头文件)?
答案 0 :(得分:2)
不,那是一个错误。
您可能是想
typedef struct sub_buffer slc_buffer;
在这种情况下,您可以始终为类型引入typedef别名,即使您在自己的作用域中没有定义这些类型也是如此。
这是经典的自引用“节点”起作用的原因:
typedef struct node node;
struct node {
node *next;
void *data;
};
请注意第一行中如何使用未知类型的typedef
。