C中静态函数和正常函数的区别?

时间:2013-08-13 02:57:15

标签: c function static

在我们的项目中,我们有大约50K行的相当大的C文件,用90年代写成。 我想根据功能拆分文件。但是,此文件中的所有函数都声明为static。所以,文件作用域。如果我拆分文件,那么file1中的函数不能调用file2中的函数,反之亦然。

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

3 个答案:

答案 0 :(得分:6)

在C中,在定义功能时, static 关键字会产生以下两个主要后果:

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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