繁体   English   中英

内联函数和外部链接

[英]Inline functions and external linkage

在这个答案https://stackoverflow.com/a/4193698/738811中写道,“内联函数默认具有外部链接”。 但是,默认情况下不可能链接内联的内容。 那么说内联函数有外部联系是什么意思呢?

名称的链接与定义的位置或方式无关,只与名称可用于引用特定对象或函数的位置无关。

声明内联函数不会强制它内联; 它只是放宽了一个定义规则,允许在每个翻译单元中使用它的定义(并且在每个翻译单元中需要一个定义),以便更容易内联。 如果编译器决定不内联对其的特定调用,或者如果您获取它的地址,则不会阻止生成非内联版本。

所以“外部联动”和“内联”并不是唯一的; “外部链接”意味着该功能可以在任何翻译单元中引用,“内联”意味着它必须在任何调用它的翻译单元中定义。

也许更好的表达方式是“如果需要联系,它将是外部的”。 这意味着,如果您获取内联函数的地址,该地址将在外部可见(不是模块的静态)。

内联函数不一定是内联扩展的。 如果不是,则语言定义要求只有一个函数副本。

内联函数通常与其他编译单元“可链接”。 它们不会显示为内联函数。 编译文件中有一个函数副本。 这适用于免费的内联函数。 类成员函数不会,通常会获得“非内联”使用的函数副本。 好的链接器也会删除代码作为“死代码”,如果它从未被重新引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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