代码之家  ›  专栏  ›  技术社区  ›  schot

如何在C99中将函数定义为内联内部和外部副本

  •  4
  • schot  · 技术社区  · 14 年前

    /* 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)?

    1 回复  |  直到 14 年前
        1
  •  5
  •   caf    14 年前

    在C99规则下看起来很好。因为 stack.c 使用 extern inline 函数的声明,它将用外部链接定义,也可以内联在该文件中。

    其他文件将只有声明,因此将链接到具有外部链接的版本。

    请注意,函数不允许定义任何具有静态存储持续时间的可修改对象,也不允许引用任何不具有静态存储持续时间的函数或全局变量 .