在C语言中, static 关键字有以下几种主要应用:
1.修饰局部变量
当 static关键字修饰一个局部变量时,这个变量就成为静态局部变量,通常一般局部变量存储在栈区,在函数执行结束后变量就会被销毁了。但被 static 修饰的局部变量存储在静态存储区,在函数调用结束时在程序的整个生命周期内都存在。
例如:
在这个例子中, count 是 func 函数内的静态局部变量。第一次调用 func 时, count 初始化为0,然后自增为1并打印。第二次调用 func 时, count 不会重新初始化,而是保留上次调用结束时的值1,然后自增为2并打印。
#include <stdio.h>
void func() {
static int count = 0; // static修饰局部变量count
count++;
printf("count的值为:%d\n", count);
}
int main() {
func();
func();
return 0;
}
2.修饰全局变量
用于限制全局变量的作用域。在一个C文件中定义的全局变量默认是可以被其他文件中的函数访问。例如,在一个多文件的c中,如果有一个文件定义了普通全局变量,那么在另一个文件中可以通过extern关键字来使用。但如果用 static 修饰全局变量,这个变量就只能在定义它的文件内部访问,其他文件无法访问。
例如,有 file1.c 和 file2.c 两个文件:
file1.c 内容如下:
static int global_variable = 10; // 用static修饰全局变量
void print_variable() {
printf("file1中的global_variable的值为:%d\n", global_variable);
}
file2.c 内容如下:
// 在这里无法访问file1.c中的global_variable变量
int main() {
// 下面这行代码如果取消注释会导致编译错误,因为无法访问另一个文件中被static修饰的全局变量
// printf("尝试访问file1中的global_variable的值为:%d\n", global_variable);
return 0;
}
3.修饰函数
作用和修饰全局变量类似,是用于限制函数的作用域。被 static 修饰的函数是静态函数,只能在定义它的文件内部被调用,其他文件无法调用。
例如,还是有 file1.c 和 file2.c 两个文件:
file1.c 内容如下
#include <stdio.h>
// 定义一个静态函数,该函数只能在本文件中被调用
static void staticFunction() {
printf("This is a static function in file1.c\n");
}
void callStaticFunction() {
staticFunction();
}
file2.c 内容如下:
// 尝试在另一个文件中调用file1.c中的静态函数会出错
// 因为其作用域仅限于file1.c
// 正确的做法是调用file1.c中的callStaticFunction函数来间接调用staticFunction
extern void callStaticFunction();
int main() {
callStaticFunction();
return 0;
}
标签:count,文件,file1,C语言,关键字,static,修饰,全局变量
From: https://blog.csdn.net/2401_88607462/article/details/144571139