私有头中私有操作的静态内联定义

时间:2019-05-09 15:16:17

标签: c static inline

我有一些公共头文件,其中包含不透明的结构声明和一些对结构进行操作的函数。这是pub.h的样子:

typedef struct ns_struct ns_struct;

ns_struct * ns_struct_allocate(void);

void ns_struct_release(ns_struct *);

//other declarations

我需要在多个专用头文件/ c文件中使用struct ns_struct的定义。因此,我创建了一个包含其定义的专用私有头。我还想提供一个额外的私有操作。 ns_struct.h

#include "pub.h"

struct ns_struct{
    size_t sz;
    void *mem;
    int counter;
};

static inline void ns_struct_resize(size_t new_size, struct ns_struct*){
     //...
}

我看到的问题是,是否将ns_struct_resize添加到公共API并意外地忘记使它成为非静态对象,而不是我们在同一翻译单元中具有内部和外部链接的标识符ns_struct_resize导致未定义的行为。

我看到的解决方法是声明一个具有外部链接的函数,并在c文件中提供一个定义。但是我失去了内联功能,因此我认为对该功能很关键。

处理这种情况的另一种方式是什么?

0 个答案:

没有答案