【问题标题】:Inline functions with internal linkage?具有内部链接的内联函数?
【发布时间】:2011-01-24 18:43:51
【问题描述】:

在 C 语言中:为什么只有具有内部链接(即用静态声明)的内联函数可以引用(即复制地址、读取、写入或调用)具有静态存储持续时间的文件范围内的变量或函数,而其他内联函数函数可能没有?

【问题讨论】:

    标签: c inline-functions


    【解决方案1】:

    这就是事物的定义方式。

    内联函数将被插入到调用它的模块中。因此,它无法访问其定义的模块中的私有内容。

    如果内联函数在该模块中使用(内部链接)。然后授予它访问该模块的“私有”内容的权限是安全的。

    【讨论】:

      【解决方案2】:

      使用存储说明符“static”声明的具有文件范围的对象或函数具有内部链接。虽然它的生命周期是程序的整个执行过程,但不会为其他翻译单元声明(即可见)具有内部链接的对象。

      对于具有外部链接的内联函数,编译器可以:

      • 在声明函数的翻译单元中调用实例
      • 在调用点执行内联替换
      • 在调用翻译单元内创建一个相同但独立的函数实例

      在最后两种情况下,具有内部链接的对象将不可见。因此具有外部链接的内联函数不能引用具有内部链接的标识符。

      此外,它“不应包含具有静态存储持续时间的可修改对象的定义”,因为这可能导致该对象的多个实例,这可能不是预期的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 2012-03-07
        • 2018-12-06
        • 1970-01-01
        相关资源
        最近更新 更多