我的库包含一个同时用于内部和外部的函数。该函数非常小,我希望编译器在调用internal时尝试内联函数。由于该功能使用不完整类型的信息,因此不能内联外部呼叫。所以我的模块也应该总是包含一个具有外部链接功能的副本。如何将函数定义为C99中的内联内部和外部副本
我想我找到了以下解决方案,但想你的建议:
/* 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)?
虽然这个问题从语言的角度来看是有效的,但从实际的角度来看,'inline'对于编译器在内部调用时是否内联函数没有任何影响,所以你可以通过不使用它简化了你的代码。 – Leushenko 2017-08-03 09:59:40