C-头中的函数实现应该使用extern/inline/static吗?
我在头文件中使用函数实现来实现简单的代码共享。最简单的例子: foo.h: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
#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文件)。请注意,这样做意味着如果多个源文件包含此头文件,则每个源文件都有自己的函数副本
使用
内联
以及静态
是不必要的,但它可以作为编译器对其执行某些优化的提示。如果头中的函数实现也是内联的,则它可能是外部的。但是,这确实需要在程序中的某个地方提供函数的非内联外部定义。