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
合适吗?如果不是,我应该使用 static
、extern
和 inline
的什么组合?
如果您要将函数的实现放在 header 文件中,它 必须 具有 static
存储空间 class 说明符。这将函数名称的可见性限制为最终为 built-in 的翻译单元(即 .c 文件)。请注意,这样做意味着如果多个源文件包含此 header,那么每个文件都将拥有自己的函数副本。
不需要使用 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
合适吗?如果不是,我应该使用 static
、extern
和 inline
的什么组合?
如果您要将函数的实现放在 header 文件中,它 必须 具有 static
存储空间 class 说明符。这将函数名称的可见性限制为最终为 built-in 的翻译单元(即 .c 文件)。请注意,这样做意味着如果多个源文件包含此 header,那么每个文件都将拥有自己的函数副本。
不需要使用 inline
和 static
,但它可以作为编译器对其执行某些优化的提示。