外部函数声明是否重要?

问题描述 投票:0回答:1

按标准规定

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

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

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

案例1。

static inline void test(void){ //internal linkage, can be an inline function
    printf("Test\n");
}

inline void test(void); //does it provide an external definition?

案例2。

static inline void test(void){ //internal linkage, can be an inline function
    printf("Test\n");
}

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("Test\n");
}

void test(void); //does it provide an external definition?

我对这三种情况感到困惑。它们之间有区别吗?我目前认为它们为

案例1-不提供外部定义(inline,不带extern

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

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

c language-lawyer linkage inline-functions
1个回答
0
投票
[staticextern无法一起使用。

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

实际上应该是

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

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


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

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

这些实际上与(如果我理解正确的话)与:发生冲突:

具有

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

[extern完全是关于外部链接,而不是内部链接。
© www.soinside.com 2019 - 2024. All rights reserved.