静态函数的优点是什么?

发布于 2024-12-10 18:38:46 字数 183 浏览 1 评论 0原文

下面的声明:

static int *foo();

foo 声明为静态函数,返回指向 int 的指针。

将函数声明为 static 的目的是什么?

The declaration below:

static int *foo();

declares foo as a static function returning a pointer to an int.

What's the purpose of declaring a function as static ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

把梦留给海 2024-12-17 18:38:46

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

一般来说,函数可能应该被声明为静态,除非您有特定需要从另一个源文件调用它。

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

The function's name isn't visible outside the translation unit (source file) in which it's declared, and won't conflict with another function foo in another source file.

In general, functions should probably be declared static unless you have a specific need to call it from another source file.

(Note that it's only the name that's not visible. It can still be called from anywhere in the program via a pointer.)

白色秋天 2024-12-17 18:38:46

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

It prevents other translation units (.c files) from seeing the function. Keeps things clean and tidy. A function without static is extern by default (is visible to other modules).

醉南桥 2024-12-17 18:38:46

来自C99标准:

6.2.2 标识符的链接

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

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

From the C99 standard:

6.2.2 Linkages of identifiers

If the declaration of a file scope identifier for an object or a function contains the storage-class specifier static, the identifier has internal linkage.

and

In the set of translation units and libraries that constitutes an entire program, each
declaration of a particular identifier with external linkage denotes the same object or
function. Within one translation unit, each declaration of an identifier with internal
linkage denotes the same object or function. Each declaration of an identifier with no
linkage denotes a unique entity.

美男兮 2024-12-17 18:38:46

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

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

有关示例,请参阅此处

Declaring a function as static prevents other files from accessing it. In other words, it is only visible to the file it was declared in; a "local" function.

You could also relate static (function declaration keyword, not variable) in C as private in object-oriented languages.

See here for an example.

他夏了夏天 2024-12-17 18:38:46

将函数或全局变量标记为static,一旦当前翻译单元被编译到目标文件中,链接器就看不到它。

换句话说,它仅在当前翻译单元内具有内部链接。当不使用static或显式使用extern存储类说明符时,该符号具有外部链接。

Marking a function or a global variable as static makes it invisible to the linker once the current translation unit is compiled into an object file.

In other words, it only has internal linkage within the current translation unit. When not using static or explicitly using the extern storage class specifier, the symbol has external linkage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文