静态功能有什么优势?

时间:2011-10-18 20:54:42

标签: c static

在一个项目源代码中看到我见过下面的声明

static int *foo();

所以它将foo声明为返回指向int的指针的静态函数。所以在这里,我想问你们将函数声明为静态的目的是什么?

5 个答案:

答案 0 :(得分:9)

函数的名称在声明它的翻译单元(源文件)之外是不可见的,并且不会与另一个源文件中的另一个函数foo冲突。

通常,函数应该声明为static,除非您特别需要从另一个源文件中调用它。

(请注意,只有名称不可见。它仍然可以通过指针从程序中的任何位置调用。)

答案 1 :(得分:2)

它可以防止其他翻译单元(.c文件)看到该功能。保持干净整洁。默认情况下,没有static的函数为extern(其他模块可见)。

答案 2 :(得分:2)

来自C99标准:

  

6.2.2标识符的链接

     

如果对象或函数的文件范围标识符声明包含存储类指定静态,则标识符具有内部链接。

  

在构成整个程序的翻译单元和库集中   具有外部链接的特定标识符的声明表示相同的对象或   功能。在一个翻译单元内,每个声明的内部声明   连接表示相同的对象或功能。每个声明的声明都没有   link表示一个独特的实体。

答案 3 :(得分:1)

将函数声明为static会阻止其他文件访问它。换句话说,它只对声明它的文件可见; “本地”功能。

您还可以将C中的static(函数声明关键字,而非变量)与面向对象语言中的private相关联。

有关示例,请参阅here

答案 4 :(得分:1)

将函数或全局变量标记为static会使当前转换单元编译为目标文件时链接器不可见。

换句话说,它只在当前翻译单元中具有内部链接。如果不使用static或明确使用extern存储类说明符,则该符号具有外部链接。