C语言 - 函数实现应该在头文件中使用extern/inline/static吗?

3

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

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,它可以编译通过,但由于我只是猜测尝试,我不确定它是否以某种方式存在危险/有害。

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

1个回答

3

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

使用inline以及static并非必需,但它可以作为提示,告诉编译器对其执行某些优化。


1
如果一个头文件中的函数实现是内联的,那么它可能是外部的。然而,这需要在程序的某个地方提供非内联的外部函数定义。 - John Bollinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接