我有一些公共头文件,其中包含不透明的结构声明和一些对结构进行操作的函数。这是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
文件中提供一个定义。但是我失去了内联功能,因此我认为对该功能很关键。
处理这种情况的另一种方式是什么?