繁体   English   中英

对于带有内联的 function 声明,外部是否重要?

[英]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相同)

staticextern不能一起使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM