Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中静态函数和正常函数的区别?_C_Function_Static - Fatal编程技术网

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

C语言中静态函数和正常函数的区别?,c,function,static,C,Function,Static,在我们的项目中,我们有大约50K行的相当大的C文件,是在90年代编写的。 我想根据功能分割文件。但是,该文件中的所有函数都声明为静态函数。所以,文件范围是有限的。如果拆分文件,则file1中的函数无法调用file2中的函数,反之亦然 但是,我的TL觉得可以通过使用静态函数来优化内存。 我编写了一些示例代码,以查看不同线程的堆栈是否不同。 好像是的。有人能告诉我静态函数和普通函数在文件作用域上的区别吗?在C中,定义函数时,static关键字有以下两个主要后果: 防止导出函数名(即函数没有外部链接)

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

但是,我的TL觉得可以通过使用静态函数来优化内存。 我编写了一些示例代码,以查看不同线程的堆栈是否不同。
好像是的。有人能告诉我静态函数和普通函数在文件作用域上的区别吗?

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

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

  • 由于函数被清楚地标记为文件私有,因此编译器可以更好地为函数生成完整的调用图。这可能导致编译器决定自动串联函数以获得更好的性能


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

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

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