C语言中静态函数和普通函数有什么区别?

4
在我们的项目中,有一个大约有5万行代码量的C文件,是在90年代编写的。我想根据功能将文件拆分,但是该文件中的所有函数都被声明为静态函数,因此只能在文件内使用。如果我将文件拆分,则file1中的函数无法调用file2中的函数,反之亦然。
但是,我的TL认为可以通过使用静态函数进行内存优化。我编写了一些示例代码来查看不同线程的堆栈是否不同。似乎确实如此。请问有人能告诉我静态函数和普通函数以及文件范围之外的函数之间的区别吗?

1
通常使用static的主要目的是避免名称冲突,而不是任何优化或效率问题。因此,如果您可以为函数名称添加足够唯一的前缀或后缀,那么将它们设置为extern就可以了。 - aschepler
3个回答

8
在C语言中定义函数时,static关键字具有以下两个主要影响:
  1. 防止函数名称被导出(即函数没有外部链接)。因此,防止其他代码部分进行关联/直接调用。

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


4

所有函数都被默认声明为extern,这意味着它们可以在翻译单元之间被看到。但是当我们使用static时,它会限制函数的可见性仅限于定义它的翻译单元内。因此,我们可以将那些仅对同一文件中的其他函数可见的函数称为静态函数。


0

最重要的区别是您无法在任何其他文件中调用静态函数。我认为是这样的,对吧?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接