Cprogramming 简明教程
Static Keyword in C
What is static Keyword in C?
static keyword in C 是 storage class 说明符之一,它具有基于使用上下文的不同含义。
“ static ”关键字用于声明静态变量和定义静态函数。当声明为 “static” 时,变量表示静态存储类。
static function 仅可在其中定义的程序文件中(具有 “.c” 扩展名)内使用。不能使用 “extern” 关键字将静态函数导入另一个文件。
Uses of static Keyword
以下是静态关键字的不同用法
-
Static Local Variable :当一个局部变量使用静态关键字声明时,它的生存期将持续到程序结束,并保留函数调用之间的值。
-
Static Global Variable :当一个全局变量使用静态关键字声明时,它只能在同一文件中访问。当您想要将全局变量作为其中声明的文件的私有全局变量时,它很有用。
-
Static Functions :当函数声明为静态函数时,它的作用域将限制在声明函数的文件内。您不能在其他文件中访问该函数。
Static Variables (static Keyword with Variables)
When a variable is declared as static, it is initialized only once 。编译器会将变量保留到程序结束。 static variable 也用于存储应该在多个函数之间共享的数据。
以下是在静态变量方面需要注意的一些重要事项 −
-
编译器在计算机的主内存中为静态变量分配空间。
-
与 auto 不同,静态变量初始化为零,而不是垃圾。
-
如果静态变量是在函数内声明的,那么在每次函数调用时都不会对其重新初始化。
-
静态变量具有局部作用域。
Example of static Keyword with Variables
在以下示例中,counter() 函数中的变量 “x” 被声明为静态。当第一次调用 counter() 函数时,它被初始化为 “0”。在每次后续调用中,它不会被重新初始化,而是保留较早的值。
#include <stdio.h>
int counter();
int main() {
counter();
counter();
counter();
return 0;
}
int counter() {
static int x;
printf("Value of x as it enters the function: %d\n", x);
x++;
printf("Incremented value of x: %d\n", x);
}
当你运行这段代码时,它将产生以下输出:
Value of x as it enters the function: 0
Incremented value of x: 1
Value of x as it enters the function: 1
Incremented value of x: 2
Value of x as it enters the function: 2
Incremented value of x: 3
静态变量类似于全局变量,因为它们都初始化为 0(对于数字类型)或 null pointers (对于 pointers ),除非显式分配。但是,静态变量的范围被限制为其中声明的函数或块。
Static Functions (static Keyword with Functions)
默认情况下,编译器将每个 function 视为全局函数。可以在程序内的任何地方访问它们。
如果在定义中以关键字“static”作为前缀,我们得到一个范围限于其对象文件(以“.c”扩展名保存的程序的编译版本)的静态函数。这意味着静态函数仅在其对象文件中可见。
可以在函数名称前放置关键字“static”来声明一个静态函数。
Example of static Keyword with Function (in Multiple Files)
使用 CodeBlocks IDE 打开一个控制台应用程序。添加两个文件“file1.c”和“main.c”。这些文件的内容如下−
“ file1.c ” 的内容 −
static void staticFunc(void) {
printf("Inside the static function staticFunc() ");
}
“ main.c ” 的内容 −
#include <stdio.h>
#include <stdlib.h>
int main() {
staticFunc();
return 0;
}
现在,如果构建上述控制台应用程序项目,那么我们将收到一条错误,即“对 staticFunc() 的引用未定义”。这是因为函数 staticFunc() 是一个静态函数,它只在其对象文件中可见。
Example of static Keyword with Function (in the Same File)
以下程序演示了静态函数在 C 程序中的工作方式 −
#include <stdio.h>
static void staticFunc(void){
printf("Inside the static function staticFunc() ");
}
int main(){
staticFunc();
return 0;
}
以上程序的输出如下:
Inside the static function staticFunc()
在上述程序中,函数 staticFunc() 是一个静态函数,用于打印“Inside the static function staticFunc()”。main() 函数调用 staticFunc()。此程序可以正确工作,因为静态函数仅从其自身的对象文件中调用。
Example of static Keyword with Multiple Functions
您可以在同一个对象文件中拥有多个静态函数,如下例所示 −
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// define the static function
static int square( int num){
return num * num;
}
static void voidfn(){
printf ("From inside the static function.\n");
}
static int intfn(int num2){
return sqrt(num2);
}
int main(){
int n1, val;
n1 = 16;
val = square(n1); // Call voidfn static function
printf("The square of the %d : %d\n", n1, val);
voidfn(); // Call intfn static function
val = intfn(n1);
printf("The square root of the %d : %d\n", n1, val);
return 0;
}
当你运行这段代码时,它将产生以下输出:
The square of the 16: 256
From inside the static function.
The square root of the 16: 4