C语言中的static
2023年7月22日,周六上午
static的3个用途
- 静态变量
- 静态全局变量
- 静态函数
静态变量
在函数内部使用 "static" 修饰的变量称为静态变量。与普通局部变量不同,静态变量在函数调用之间保持其值不变。此外,它们在程序的整个生命周期内都存在,不像自动存储类变量那样在每次函数调用时创建和销毁。它们通常用于需要在函数调用之间保持状态的情况,或者在函数内部共享数据。
举例说明
#include <stdio.h>
void increment() {
static int count = 0; // 静态变量
count++;
printf("Count: %d\n", count);
}
int main() {
increment(); // 输出: Count: 1
increment(); // 输出: Count: 2
increment(); // 输出: Count: 3
return 0;
}
在这个示例中,静态变量 count 在每次调用 increment() 函数时都会保留其值。每次调用 increment() 函数时,count 递增并打印当前的计数值。
静态全局变量
使用 "static" 修饰的全局变量称为静态全局变量。静态全局变量的作用域仅限于声明它的源文件,其他源文件无法访问它。与普通全局变量不同,静态全局变量无法被其他文件调用或访问。
举例说明
#include <stdio.h>
static int count = 0; // 静态全局变量
void increment() {
count++;
}
int main() {
increment();
printf("Count: %d\n", count); // 输出: Count: 1
return 0;
}
在这个示例中,静态全局变量 count 在整个源文件中都可见,但在其他源文件中无法访问。它的作用域仅限于定义它的源文件。
静态函数
使用 "static" 修饰的函数称为静态函数。静态函数只能在定义它们的源文件中可见,不能被其他源文件中的函数调用。静态函数的作用主要是将函数的作用域限制在定义它的源文件内,防止与其他文件中的同名函数发生冲突。
举例说明
//文件名:001.c
#include "001.h"
static int add(int a, int b) {
return a + b;
}
//文件名:001.h
static int add(int a,int b);
//文件名:002.c
#include "001.h"
#include<stdio.h>
int main(){
int result = add(6,3);
printf("result=%d",result);
}
编译后,编译器会报错说找不到add这个函数

但当去掉001.h和001.c里面的“static”关键字后,编译成功了
//文件名:001.c
#include "001.h"
int add(int a, int b) {
return a + b;
}
//文件名:001.h
int add(int a,int b);
//文件名:002.c
#include "001.h"
#include<stdio.h>
int main(){
int result = add(6,3);
printf("result=%d",result);
}

浙公网安备 33010602011771号