按标准规定
如果函数标识符的声明没有存储类说明符,它的链接被确定为完全一样用存储类说明符
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-提供外部定义(inline
和extern
)
案例3-提供外部定义(与extern
相同]
static
和extern
无法一起使用。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
完全是关于外部链接,而不是内部链接。