在单独的头文件中定义的类型的Typedef

时间:2019-04-15 09:59:33

标签: c struct header typedef software-design

我有两个头文件:

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文件中提供到另一个头文件)?

1 个答案:

答案 0 :(得分:2)

不,那是一个错误。

您可能是想

typedef struct sub_buffer slc_buffer;

在这种情况下,您可以始终为类型引入typedef别名,即使您在自己的作用域中没有定义这些类型也是如此。

这是经典的自引用“节点”起作用的原因:

typedef struct node node;
struct node {
  node *next;
  void *data;
};

请注意第一行中如何使用未知类型的typedef