Моя библиотека содержит функцию, которая используется как внутренняя, так и внешняя.Функция настолько мала, что я хочу, чтобы компилятор пытался встроить функцию при вызове internal.Поскольку функция использует информацию неполного типа, внешние вызовы не могут быть встроены.Поэтому мой модуль также должен всегда содержать копию функции с внешней связью.
Я думаю, что нашел следующее решение, но хотел бы получить ваш совет:
/* stack.h */
struct stack;
extern bool stack_isempty(struct stack *s);
/* stack.c */
#include "stack.h"
struct stack { [...]; int size; };
inline bool stack_isempty(struct stack *s) { return s->size == 0; }
Обычно я использую встроенныйнаоборот или только поместите функцию static inline
в заголовочный файл.Но, как объяснено, это невозможно здесь.
Дает ли этот подход желаемые результаты?Кто-нибудь видит какие-либо недостатки в этом подходе (это портативный C99)?