代码之家  ›  专栏  ›  技术社区  ›  Lou

将内联函数放在C头中是错误的吗?

  •  7
  • Lou  · 技术社区  · 7 年前

    static inline

    此外,我需要确保某些函数是内联的,以便在某些低级中断处理程序中调用时不会调用其他函数(即更改CPU寄存器),因此这不仅仅是让编译器选择是否会影响性能。

    然而,我的一位同事告诉我,这是一件不寻常的事情,我应该避免。在这个项目中,我可能仍然可以重新安排一切,所以我只想确认,如果我们决定使用头内联线,从长远来看,是否有一些问题我们可能会面临?

    2 回复  |  直到 7 年前
        1
  •  5
  •   user2371524 user2371524    7 年前

    根据n1570(最新公共C11草案),§6.7.4:

    1. inline .制作 函数内联函数建议尽可能快地调用函数。这些建议的有效程度取决于实施情况。

    内联 注意,这给了实现很大的自由,包括完全忽略 内联 .

    内联 内联

    另一方面,如果编译器提供了一种方法 武力 函数的内联(根据您的评论 _inline 说明符不适用于编译器),在头文件中包含这些函数是安全的。但请注意,它绝不是便携式的。

    commented by cmaster 手动内联 函数式宏 而不是便携式解决方案。

        2
  •  3
  •   Serge Ballesta    7 年前

    根据对问题的评论,定义 static _inline 对于此特定编译器 ,编译器文档中的引用对此很清楚。

    稍后您可能会面临的问题是,它是特定编译器的特定扩展,不同于 标准 inline 说明符。正如Felix所说,该标准允许实现选择如何实现内联,尤其是忽略说明符仍然是一致的:

    使函数成为内联函数意味着对函数的调用如下 这些建议的有效程度是 定义的实现

    这就是说,语义似乎是相同的(从草案1256到C99或草案1570到C11):

    6.7.4函数说明符

    任何具有内部链接的函数都可以是内联函数。对于具有外部 如果函数是用内联 函数说明符,则它也应在同一翻译单元中定义。如果所有的 翻译单元中函数的文件范围声明包括内联函数 没有外部的说明符,则该翻译单元中的定义是内联的 并且不禁止在另一个翻译单元中使用外部定义。内联定义 提供了外部定义的替代方案,翻译人员可以使用外部定义来实现 函数使用内联定义或外部定义

    内联

    推荐文章