如标准中规定
如果函数标识符的声明没有存储类说明符,则它的链接将完全确定,就好像它是使用存储类说明符声明的一样
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——提供外部定义(inlinewith extern)
案例 3——提供外部定义(与 相同extern)