C-头中的函数实现应该使用extern/inline/static吗?

C-头中的函数实现应该使用extern/inline/static吗?,c,static,header,inline,extern,C,Static,Header,Inline,Extern,我在头文件中使用函数实现来实现简单的代码共享。最简单的例子: 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 \ifndef FOO\H #定义FOO_H //可能希望包含此函数的extern

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

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
\ifndef FOO\H
#定义FOO_H
//可能希望包含此函数的extern/static/inline关键字
最大整数(整数x,整数y){
返回x
B.c:

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

int main() {
    printf("Max of 1 and 2: %d", max(1, 2));
}
#包括
#包括“foo.h”
int main(){
printf(“1和2的最大值:%d”,最大值(1,2));
}
有人建议我为.h文件中实现的函数使用
inline
关键字。然而,这给了我一个链接器错误。如果我使用
extern-inline
,它确实可以编译,但由于我只是猜测要尝试这种方法,所以我不确定它在某种程度上是否危险/不好


在这里使用
extern inline
合适吗?如果不是,我应该使用
静态
外部
内联
的什么组合?

如果要将函数的实现放在头文件中,它必须具有
静态
存储类说明符。这将函数名的可见性限制为仅显示最终内置的翻译单元(即.c文件)。请注意,这样做意味着如果多个源文件包含此头文件,则每个源文件都有自己的函数副本


使用
内联
以及
静态
是不必要的,但它可以作为编译器对其执行某些优化的提示。

如果头中的函数实现也是内联的,则它可能是外部的。但是,这确实需要在程序中的某个地方提供函数的非内联外部定义。