如标准中指定的那样
如果函数标识符的声明没有 存储类说明符,其链接的确定与它完全一样 使用存储类说明符
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 -- 提供外部定义(inline
extern
(
案例 3 -- 提供外部定义(与extern
相同(
static
和extern
不能放在一起。
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
恰恰是关于外部联系,而不是内部联系。