У меня есть публичный заголовок, содержащий непрозрачное объявление структуры и некоторую функцию для работы со структурой. Вот как это выглядит pub.h
:
typedef struct ns_struct ns_struct;
ns_struct * ns_struct_allocate(void);
void ns_struct_release(ns_struct *);
//other declarations
Мне нужно определение struct ns_struct
, которое будет использоваться в нескольких частных заголовочных файлах / c. Поэтому я создал специальный закрытый заголовок, содержащий его определение. Я также хочу предоставить дополнительную частную операцию. 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
. Но тогда я теряю способность к встраиванию, что, по моему мнению, крайне важно для этой функции.
Что может быть другим способом справиться с таким делом?