C - Header 中的函数实现是否应该使用 extern/inline/static?

C - Should Function Implementations in Header use extern/inline/static?

我在头文件中使用函数实现来进行简单的代码共享。最小示例:

foo.h:

#ifndef FOO_H
#define FOO_H

// potentially want to include extern/static/inline keyword for this function
int max(int x, int y) {
    return x < y ? y : x;
}

#endif

bar.c:

#include <stdio.h>
#include "foo.h"

int main() {
    printf("Max of 1 and 2: %d", max(1, 2));
}

有人建议我为 .h 文件中实现的功能使用 inline 关键字。但是,这给了我一个链接器错误。如果我使用 extern inline 它确实可以编译,但由于我只是猜测要尝试这个,所以我不确定它在某种程度上不是 dangerous/bad。

在这里使用extern inline合适吗?如果不是,我应该使用 staticexterninline 的什么组合?

如果您要将函数的实现放在 header 文件中,它 必须 具有 static 存储空间 class 说明符。这将函数名称的可见性限制为最终为 built-in 的翻译单元(即 .c 文件)。请注意,这样做意味着如果多个源文件包含此 header,那么每个文件都将拥有自己的函数副本。

不需要使用 inlinestatic,但它可以作为编译器对其执行某些优化的提示。