我的库包含一个内部和外部都使用的函数。该函数是如此之小,以至于我希望编译器在调用内部函数时尝试内联函数。因为函数使用了不完整类型的信息,外部调用不能被内联。所以我的模块也应该始终包含具有外部链接的函数的副本。
我想我找到了以下解决方案,但希望得到您的建议:
/* 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; }
通常我会反过来使用 inline 或者只static inline
在头文件中放置一个函数。但正如解释的那样,这在这里是不可能的。
这种方法是否给出了预期的结果?有没有人看到这种方法有任何缺点(它是便携式 C99)吗?