我在C代码的不同地方看到过静态这个词;这是否像c#中的静态函数/类(实现是跨对象共享的)?
当前回答
如果你在mytest.c文件中声明这个:
static int my_variable;
那么这个变量只能从这个文件中看到。该变量不能导出到其他任何地方。
如果在函数内部声明,则每次调用该函数时,变量的值将保持不变。
静态函数不能从文件外部导出。因此,在*.c文件中,如果将函数和变量声明为静态,则隐藏了它们。
其他回答
静态变量是可以在函数中使用的特殊变量,它在调用之间保存数据,并且不会在调用之间删除数据。例如:
void func(void) {
static int count; // If you don't declare its value, it is initialized with zero
printf("%d, ", count);
++count;
}
int main(void) {
while(true) {
func();
}
return 0;
}
输出:
0, 1, 2, 3, 4, 5...
人们总是说C语言中的“static”有两层含义。我提供了另一种看待它的方式,赋予它一个单一的含义:
对一个项目应用“static”会迫使该项目具有两个属性:(a)在当前范围外不可见;(b)它是持久的。
它似乎有两种含义的原因是,在C语言中,每个“static”可能应用的项都已经具有这两个属性之一,所以似乎这种特殊用法只涉及另一个。
例如,考虑变量。在函数外部声明的变量已经具有持久性(在数据段中),因此应用'static'只能使它们在当前作用域(编译单元)之外不可见。相反,在函数内部声明的变量在当前作用域(函数)之外已经具有不可见性,因此应用“static”只能使它们持久。
将“static”应用于函数就像应用于全局变量一样——代码必须是持久的(至少在语言中),所以只能改变可见性。
注意:这些注释只适用于C。在c++中,对类方法应用'static'是真正赋予关键字不同的含义。C99数组参数扩展也是如此。
分享一下我对这一点的了解。
在C语言中static是一个声明说明符,它分为三类:
存储类:有四个类:auto, static, extern和register。 类型限定符:如关键字:const, volatile等。 类型说明符:如关键字:void, char, short, int等。
所以静态是一个存储类。它将确定C程序中每个变量的以下三个属性。
存储持续时间:指为变量分配内存和释放内存的时间。具有静态存储持续时间的变量,只要程序在运行,它就保持在相同的内存位置。 作用域:指程序文本中变量可以被访问的部分。静态变量具有文件作用域而不是块作用域。 链接:指程序的不同部分(或文件)可以共享变量的程度。如果一个静态变量是在一个块中声明的,那么它就没有链接。如果一个静态变量是在块外部声明的,那么它就有内部链接。内部链接使它可以在单个文件中访问。
静态存储类对变量有不同的影响,这取决于它是在块外部还是块内部声明的。需要具体情况考虑。
一个静态变量值在不同的函数调用之间持续存在,它的作用域被限制在本地块 静态变量的初始值总是0
静态在不同的语境中有不同的含义。
你可以在C函数中声明一个静态变量。这个变量只在函数中可见,但它的行为像一个全局变量,因为它只初始化一次,并保留其值。在这个例子中,每次调用foo(),它都会输出一个递增的数字。静态变量只初始化一次。 Void foo () { 静态int I = 0; printf (" % d”,我);我+ + } static的另一种用法是在.c文件中实现一个函数或全局变量,但不希望它的符号在文件生成的.obj之外可见。如。 静态无效foo(){…}