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

问题描述 投票:0回答:1

我有两个头文件:

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文件中提供吗?

c struct header typedef software-design
1个回答
2
投票

不,那将是一个错误。

你可能意味着

typedef struct sub_buffer slc_buffer;

在这种情况下它很好,你总是可以将typedef别名引入类型,即使没有在你所在的范围内定义那些类型。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.