文章目录
前言
在C语言中,“static” 关键字用于声明静态变量和静态函数,具体取决于其在不同上下文中的使用。下面是对C语言中"static" 的主要用法的解释:
一、静态变量,不使用static
函数中定义的变量,在函数调用结束时销毁
#include <stdio.h>
void test()
{
int x = 0;
++x;
printf("\t %d", x);
}
int main()
{
for(int i = 0; i < 5; i++)
{
test();
}
}
输出结果: 1 1 1 1 1
二、使用static关键字“静态变量”
静态变量(Static Variables):在C语言中,“static” 用于声明静态变量。静态变量与自动变量(函数内部声明的普通变量)不同,它们的生命周期在程序运行期间都是存在的,而不是在函数调用结束时销毁。这使得静态变量在多次函数调用之间保留其值。
#include <stdio.h>
void test()
{
static int x = 0; // 限制局部变量,使其生命周期更长,直到进程退出
++x;
printf("\t %d", x);
}
int main()
{
for(int i = 0; i < 5; i++)
{
test();
}
}
输出结果: 1 2 3 4 5
三、静态全局函数与函数的区别
静态函数(Static Functions):在C语言中,函数默认情况下是全局可见的。但如果你在函数声明前使用 “static”,它将限制该函数的作用域,使其仅在定义它的源文件中可见,无法被其他源文件中的函数调用。这有助于避免函数名冲突。
1.建立一个头文件xxx.h
#ifndef HUTUTU_H //如果没有HUTUTU_H
#define HUTUTU_H //则定义HUTUTU_H; /*后面这个可以根据自己情况命名*/
#include <stdio.h> //头文件
//extern int static_sum; //不能声明,因为在文件中被static定义位,静态变量
//extern void global_test(); //不能声明,因为在文件中被static定义位,静态函数
extern global_sum; //全局变量声明
extern void global(); //函数声明
extern void static_test(); //函数声明
#endif //结束标志
2.建立一个文件xxx.c
#include "hututu.h"
static int static_sum = 1024; // static限制全局变量,只在该文件进行调用不能通过 extern 连接调用
int global_sum = 256;
static void global_test() // static限制全局函数,只在该文件进行调用不能通过 extern 连接调用
{
printf("静态函数被调用\n");
}
void global()
{
printf("其他文件函数被调用\n");
}
3.建立第二个文件xxx.c,作为主函数调用
#include "hututu.h"
int main()
{
//global_test(); //执行global_test()编译会报错,因为global_test()是另外一个文件的静态函数,不能被其他文件调用
global_test(); //调用另外一个文件的函数
}
输出结果: 其他文件函数被调用
四、静态全局函数与函数的区别
静态全局变量(Static Global Variables):全局变量通常可以在不同的源文件中访问。但如果你在全局变量前使用 “static”,它将限制该全局变量的作用域,使其仅在定义它的源文件中可见,无法被其他源文件中的函数访问。
#include "hututu.h"
int main()
{
//global_test(); //执行global_test()编译会报错,因为global_test()是另外一个文件的静态函数,不能被其他文件调用
global_test(); //调用另外一个文件的函数
//printf("static:%d\n",static_sum); //执行报错,调用另外文件的全局变量,用关键字声明,变为给文件的静态全局变量不能被其他文件调用
printf("global:%d\n",global_sum); //调用另外文件的全局变量
}
输出结果:global: 256
总结
“static” 在C语言中用于控制变量和函数的作用域和生命周期,以便更好地管理程序的状态和模块化。