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

有帮助吗?

解决方案

这是事物是如何定义的。

在联功能将其中它被称为模块中插入。所以,它不能访问私人东西其模块在其被定义

如果内联函数的在模块(内部连接)使用的。然后,它是安全的,从而获得在该模块的“私有”的东西的访问。

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top