[英]Does extern matter for function declaration with inline?
如标准中规定
如果 function 的标识符声明没有存储类说明符,则其链接的确定与使用存储类说明符
extern
声明时完全相同。
但是 function 说明符部分给出了inline
function 语义,如下所示:
任何具有内部链接的 function 都可以是内联 function。 对于具有外部链接的 function,适用以下限制:如果使用内联 function 说明符声明 function,则它也应在相同的翻译单元中定义。 如果翻译单元中 function 的所有文件 scope 声明都包含内联
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 - 提供外部定义(与extern
inline
)
案例 3 - 提供外部定义(与extern
相同)
static
和extern
不能一起使用 go。
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 相同)
这些实际上与(如果我理解正确的话)冲突:
任何具有内部链接的 function 都可以是内联 function。
extern
完全是关于外部链接,而不是内部链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.