C语言 静态函数的优点是什么?

pcrecxhr  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(121)

下面的声明:

static int *foo();

字符串
foo声明为静态函数,返回指向int的指针。
把一个函数声明为static的目的是什么?

ttp71kqs

ttp71kqs1#

该函数的名称在声明它的转换单元(源文件)之外不可见,并且不会与另一个源文件中的另一个函数foo冲突。
一般来说,函数应该声明为static,除非你有特定的需要从另一个源文件调用它。
(Note只有 name 是不可见的。它仍然可以通过指针从程序中的任何地方调用。)

xggvc2p6

xggvc2p62#

它防止其他翻译单元(.c文件)看到该函数。保持整洁。没有static的函数默认为extern(对其他模块可见)。

k75qkfdt

k75qkfdt3#

C99标准:

6.2.2标识符的联系

如果对象或函数的文件作用域标识符的声明包含存储类指定符static,则标识符具有内部链接。

在构成整个程序的翻译单元和库的集合中,每个带有外部链接的标识符的声明都表示相同的对象或函数。在一个翻译单元中,每个带有内部链接的标识符的声明都表示相同的对象或函数。每个没有链接的标识符的声明都表示一个唯一的实体。

j91ykkif

j91ykkif4#

声明一个函数为static可以防止其他文件访问它。换句话说,它只对声明它的文件可见;一个“本地”函数。
你也可以将C中的static(函数声明关键字,而不是变量)与面向对象语言中的private联系起来。
here就是一个例子。

toiithl6

toiithl65#

将一个函数或全局变量标记为static,使得在当前翻译单元编译成目标文件后,链接器无法看到它。
换句话说,它只在当前转换单元内具有内部链接。当不使用static或显式使用extern存储类说明符时,该符号具有外部链接。

相关问题