具有内部链接的内联函数?

时间:2010-03-07 21:40:43

标签: c inline-functions

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

2 个答案:

答案 0 :(得分:5)

这是事情的定义方式。

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

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

答案 1 :(得分:3)

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

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

  • 在声明函数的翻译单元中调用实例
  • 在通话时执行内联替换
  • 在主叫翻译单元
  • 中创建相同但独立的实例

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

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