下面的声明:
static int *foo();
字符串将foo声明为静态函数,返回指向int的指针。把一个函数声明为static的目的是什么?
foo
int
ttp71kqs1#
该函数的名称在声明它的转换单元(源文件)之外不可见,并且不会与另一个源文件中的另一个函数foo冲突。一般来说,函数应该声明为static,除非你有特定的需要从另一个源文件调用它。(Note只有 name 是不可见的。它仍然可以通过指针从程序中的任何地方调用。)
static
xggvc2p62#
它防止其他翻译单元(.c文件)看到该函数。保持整洁。没有static的函数默认为extern(对其他模块可见)。
extern
k75qkfdt3#
C99标准:
6.2.2标识符的联系
如果对象或函数的文件作用域标识符的声明包含存储类指定符static,则标识符具有内部链接。和在构成整个程序的翻译单元和库的集合中,每个带有外部链接的标识符的声明都表示相同的对象或函数。在一个翻译单元中,每个带有内部链接的标识符的声明都表示相同的对象或函数。每个没有链接的标识符的声明都表示一个唯一的实体。
j91ykkif4#
声明一个函数为static可以防止其他文件访问它。换句话说,它只对声明它的文件可见;一个“本地”函数。你也可以将C中的static(函数声明关键字,而不是变量)与面向对象语言中的private联系起来。here就是一个例子。
private
toiithl65#
将一个函数或全局变量标记为static,使得在当前翻译单元编译成目标文件后,链接器无法看到它。换句话说,它只在当前转换单元内具有内部链接。当不使用static或显式使用extern存储类说明符时,该符号具有外部链接。
5条答案
按热度按时间ttp71kqs1#
该函数的名称在声明它的转换单元(源文件)之外不可见,并且不会与另一个源文件中的另一个函数
foo
冲突。一般来说,函数应该声明为
static
,除非你有特定的需要从另一个源文件调用它。(Note只有 name 是不可见的。它仍然可以通过指针从程序中的任何地方调用。)
xggvc2p62#
它防止其他翻译单元(.c文件)看到该函数。保持整洁。没有
static
的函数默认为extern
(对其他模块可见)。k75qkfdt3#
C99标准:
6.2.2标识符的联系
如果对象或函数的文件作用域标识符的声明包含存储类指定符static,则标识符具有内部链接。
和
在构成整个程序的翻译单元和库的集合中,每个带有外部链接的标识符的声明都表示相同的对象或函数。在一个翻译单元中,每个带有内部链接的标识符的声明都表示相同的对象或函数。每个没有链接的标识符的声明都表示一个唯一的实体。
j91ykkif4#
声明一个函数为
static
可以防止其他文件访问它。换句话说,它只对声明它的文件可见;一个“本地”函数。你也可以将C中的
static
(函数声明关键字,而不是变量)与面向对象语言中的private
联系起来。here就是一个例子。
toiithl65#
将一个函数或全局变量标记为
static
,使得在当前翻译单元编译成目标文件后,链接器无法看到它。换句话说,它只在当前转换单元内具有内部链接。当不使用
static
或显式使用extern
存储类说明符时,该符号具有外部链接。