【问题标题】:Are all functions in C global?C中的所有函数都是全局的吗?
【发布时间】:2020-07-10 21:58:42
【问题描述】:

是否有可能无法从其他文件访问 ANSI C 中的函数?功能如何以及何时限制访问?起初我认为如果一个函数不包含在任何标题中,它就是私有的。 But it doesn't seem to be the case.

【问题讨论】:

  • 当函数为static 时,它们的作用域就是那个编译单元。严格的 C 要求函数声明或定义在调用函数之前可见,但编译器可能是允许的,并且链接器可以找到函数。类型和参数假设必须匹配。
  • 头文件没有什么神奇之处。 #include 指令只是在翻译阶段 4 将文件的文本插入到编译单元中。编译器在翻译阶段 7 之前对函数一无所知。头文件是在不同 .c 之间共享公共声明的好方法文件。

标签: c ansi-c global-functions


【解决方案1】:

c 中的所有函数都是全局的吗?

没有。一方面,许多人(草率地)调用全局,C语言调用文件范围与外部链接。

此外,即使在翻译单元中(“预处理 C 文件”的一种奇特方式),函数标识符也仅从其声明到翻译单元末尾可见(在范围内) (甚至是封闭块)。

要给出函数标识符内部链接(以便另一个同名的函数或对象可以存在于不同的对象文件中),您可以使用static 关键字。

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 2012-04-29
    • 2019-01-08
    • 2021-08-06
    • 2016-04-09
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多