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); 
}

posted on 2023-07-22 09:11  巨龙之路  阅读(111)  评论(0)    收藏  举报

导航