私のライブラリには、内部と外部の両方で使用される関数が含まれています。関数が非常に小さいため、内部呼び出し時にコンパイラに関数のインライン化を試みさせたいと考えています。関数は不完全型の情報を使用するため、外部呼び出しはインライン化できません。したがって、私のモジュールには、外部リンケージを持つ関数のコピーも常に含まれている必要があります。
次の解決策を見つけたと思いますが、アドバイスをお願いします。
/* 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 ですか)?