【问题标题】:Difference between static function and normal function in C?C中静态函数和普通函数的区别?
【发布时间】:2013-08-13 02:57:14
【问题描述】:

在我们的项目中,我们有大约 50K 行的相当大的 C 文件,是在 90 年代编写的。 我想根据功能拆分文件。但是,这个文件中的所有函数都被声明为静态的。所以,文件范围。如果我拆分文件,则 file1 中的函数无法调用 file2 中的函数,反之亦然。

但是,我的 TL 感觉可以通过使用静态函数来优化内存。 我写了一些示例代码来查看不同线程的堆栈是否不同。 好像是这样。有人可以告诉我静态函数和普通函数之间的区别吗?

【问题讨论】:

  • 通常使用static 的主要目的是避免名称冲突,而不是任何优化或效率问题。因此,如果您可以为函数名称添加足够独特的前缀或后缀,则将它们设为 extern 就可以了。

标签: c function static


【解决方案1】:

在 C 中,在定义函数时,static 关键字具有以下两个主要后果:

  1. 防止函数名被导出(即函数没有外部链接)。因此,防止来自代码其他部分的链接/直接调用。

  2. 由于函数被明确标记为文件私有,编译器可以更好地为函数生成完整的调用图。这可能会导致编译器决定自动内联函数以获得更好的性能。

【讨论】:

    【解决方案2】:

    所有函数都隐式声明为 extern,这意味着它们在翻译单元中可见。但是当我们使用静态时,它会将函数的可见性限制在定义它的翻译单元中。所以我们可以说只对同一文件中的其他函数可见的函数称为静态函数。

    【讨论】:

      【解决方案3】:

      最重要的区别是您不能在任何其他文件中调用静态函数。我想是的,是吗?

      【讨论】:

        猜你喜欢
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-08
        相关资源
        最近更新 更多