ANSI-C 中静态是什么意思

发布于 2024-10-09 19:47:04 字数 325 浏览 10 评论 0原文

可能的重复:
“静态”在 C 程序中意味着什么?

static 关键字在 C 中意味着什么?

我正在使用 ANSI-C。我在几个代码示例中看到,它们在变量前面和函数前面使用 static 关键字。与变量一起使用的目的是什么?与函数一起使用的目的是什么?

Possible Duplicate:
What does “static” mean in a C program?

What does the static keyword mean in C ?

I'm using ANSI-C. I've seen in several code examples, they use the static keyword in front of variables and in front of functions. What is the purpose in case of using with a variable? And what is the purpose in case of using with a function?

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

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

发布评论

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

评论(2

辞旧 2024-10-16 19:47:04

作为一个简短的回答,定义变量时 static 关键字有两种用法:

1- 使用 static 关键字在文件范围内定义变量,ie 定义的外部函数仅在该文件内可见。任何从其他文件访问它们的尝试都会导致链接时出现无法解析的符号。

2- 在函数内的块内定义为静态的变量将在同一代码块的不同调用中持续存在或“生存”。如果它们被定义为初始化,那么它们仅被初始化一次。 static 变量通常保证默认初始化为 0

Just as a brief answer, there are two usages for the static keyword when defining variables:

1- Variables defined in the file scope with static keyword, i.e. defined outside functions will be visible only within that file. Any attempt to access them from other files will result in unresolved symbol at link time.

2- Variables defined as static inside a block within a function will persist or "survive" across different invocations of the same code block. If they are defined initialized, then they are initialized only once. static variables are usually guaranteed to be initialized to 0 by default.

栀梦 2024-10-16 19:47:04

函数体内的static,即用作变量存储分类器,使该变量在函数调用之间保留其值 - 可以说,函数内的静态变量是仅可见的全局变量到该功能。这种static的使用总是使得它在线程中使用的函数不安全,你应该避免它。

另一个用例是在全局范围内使用static,即对于全局变量和函数:静态函数和全局变量是编译单元本地的,即它们不会出现在导出表中编译后的二进制对象。因此它们不会污染命名空间。将所有函数和全局变量声明为静态,使其不能从相关编译单元(即 C 文件)外部访问是一个好主意!请注意,静态变量不得放置在头文件中(除非是非常罕见的特殊情况)。

static within the body of a function, i.e. used as a variable storage classifier makes that variable to retain it's value between function calls – one could well say, that a static variable within a function is global variable visible only to that function. This use of static always makes the function it is used in thread unsafe you should avoid it.

The other use case is using static on the global scope, i.e. for global variables and functions: static functions and global variable are local to the compile unit, i.e. they don't show up in the export table of the compiled binary object. They thus don't pollute the namespace. Declaring static all the functions and global variables not to be accessible from outside the compile unit (i.e. C file) in question is a good idea! Just be aware that static variables must not be placed in header files (except i very rare special cases).

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