C语言 外部对于内联函数声明重要吗?



如标准中指定的那样

如果函数标识符的声明没有 存储类说明符,其链接的确定与它完全一样 使用存储类说明符extern声明。

但是函数说明符部分给出了inline函数语义如下:

任何具有内部链接的函数都可以是内联函数。对于一个 具有外部链接的功能,则适用以下限制:如果 函数是用内联函数说明符声明的,那么它应该 也在同一翻译单元中定义。如果所有文件范围 翻译单元中函数的声明包括内联 没有extern的函数说明符,然后定义 翻译单元是一个内联定义。

案例 1.

static inline void test(void){ //internal linkage, can be an inline function
printf("Testn");
}
inline void test(void); //does it provide an external definition?

案例 2.

static inline void test(void){ //internal linkage, can be an inline function
printf("Testn");
}
extern inline void test(void); //does it provide an external definition?

案例 3.

static inline void test(void){ //internal linkage, can be an inline function
printf("Testn");
}
void test(void); //does it provide an external definition?

我对这三个案例感到困惑。它们之间有区别吗?我目前认为它们是

情况 1 -- 不提供外部定义(inline没有extern(

案例 2 -- 提供外部定义(inlineextern(

案例 3 -- 提供外部定义(与extern相同(

staticextern不能放在一起。

static inline void test(void){ //internal linkage, can be an inline function
printf("Testn");
}
inline void test(void); //does it provide an external definition?

实际上应该是

static inline void test(void){ //internal linkage, can be an inline function
printf("Testn");
}
static inline void test(void); //does it provide an external definition?

因为定义和声明应该匹配。我不确定static是否实际上需要在也使用inline时使用。


案例 2 -- 提供外部定义(与外部内联(

案例 3 -- 提供外部定义(与外部定义相同(

这些实际上与以下方面冲突(如果我理解正确的话(:

任何具有内部链接的函数都可以是内联函数。

extern恰恰是关于外部联系,而不是内部联系。

相关内容

  • 没有找到相关文章

最新更新