外部内联做什么?

新手上路,请多包涵

我知道 inline 本身就是对编译器的建议,它可能会或可能不会内联函数,它还会产生可链接的目标代码。

我认为 static inline 做同样的事情(可能内联也可能不内联)但在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它)。

extern inline 在哪里适合?

假设我想用内联函数替换预处理器宏并要求内联该函数(例如,因为它使用 __FILE____LINE__ 宏应该为调用者解析但不是这称为函数)。也就是说,如果函数没有内联,我想查看编译器或链接器错误。 extern inline 这样做吗? (我认为,如果没有,除了坚持使用宏之外,没有其他方法可以实现这种行为。)

C++ 和 C 之间有区别吗?

不同的编译器供应商和版本之间是否存在差异?

原文由 wilbur_m 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 298
1 个回答

仅限 C++:

正如其他人指出的那样,在编译和链接之前评估宏(此处 __FILE____LINE__ );因此,如果您有一个使用它们的函数并且您希望它们对于每个文件都不同,那么您需要与 inline 相反。由于 __FILE____LINE__ 值对于每个文件都是不同的,因此函数的定义(主体)对于每个文件都是不同的。但是(非静态) inline 表示如果函数在多个翻译单元中定义, 它们都 必须 具有相同的定义

您可以在头文件中定义(不声明)普通函数或 staticstatic inline 函数并将其包含在您想要的任何位置。这样,每个翻译单元(源文件)都可以使用不同的 __FILE____LINE__ 值获得自己的函数副本。虽然,我认为在 static inline 的情况下, inline 关键字在大多数情况下是无用的。

原文由 SMMB 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题