gpt4 book ai didi

c - "static"在C中是什么意思?

转载 作者:行者123 更新时间:2023-11-30 16:08:20 27 4
gpt4 key购买 nike

我在 C 代码中的不同地方看到过“static”这个词;这是否像 C# 中的静态函数/类(其中实现在对象之间共享)?

最佳答案

  1. 函数内的静态变量在调用之间保留其值。
  2. 静态全局变量或函数仅在声明它的文件中“可见”

如果您是新手,(1) 是一个更陌生的话题,所以这里有一个例子:

#include <stdio.h>

void foo()
{
int a = 10;
static int sa = 10;

a += 5;
sa += 5;

printf("a = %d, sa = %d\n", a, sa);
}


int main()
{
int i;

for (i = 0; i < 10; ++i)
foo();
}

打印:

a = 15, sa = 15
a = 15, sa = 20
a = 15, sa = 25
a = 15, sa = 30
a = 15, sa = 35
a = 15, sa = 40
a = 15, sa = 45
a = 15, sa = 50
a = 15, sa = 55
a = 15, sa = 60

这对于函数需要在调用之间保留某些状态并且您不想使用全局变量的情况很有用。但请注意,应谨慎使用此功能 - 它会使您的代码不是线程安全的并且更难以理解。

(2) 被广泛用作“访问控制”功能。如果您有一个实现某些功能的 .c 文件,它通常只向用户公开一些“公共(public)”函数。其其余函数应设为静态,以便用户无法访问它们。这就是封装,一个很好的实践。

引用Wikipedia :

In the C programming language, static is used with global variables and functions to set their scope to the containing file. In local variables, static is used to store the variable in the statically allocated memory instead of the automatically allocated memory. While the language does not dictate the implementation of either type of memory, statically allocated memory is typically reserved in data segment of the program at compile time, while the automatically allocated memory is normally implemented as a transient call stack.

回答你的第二个问题,它与 C# 不同。

然而,在 C++ 中,static 还用于定义类属性(在同一类的所有对象之间共享)和方法。在 C 中没有类,因此此功能无关紧要。

关于c - "static"在C中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com