static是C语言中得一个关键字。
它的使用有三种情况:修饰局部变量、全局变量、函数。
修饰局部变量:改变存储属性
普通的局部变量是存放在栈中的,而被static修饰的变量是存放在数据段中的。
放在数据段中的具体位置具体分析:已初始化的在data区、未初始化的在bss区。
修饰全局变量:改变其链接性
普通的全局变量默认是加extern修饰的,可以被本工程的其他文件调用。
但被static修饰的全局变量,它只在当前文件有效,不能被本工程的其他文件调用。所以其他文件可以定义与其名字相同的全局变量。
修饰函数:改变其链接性
普通的函数定义后,其他文件想要使用的话,包含声明此函数的头文件即可。
但被static修饰的函数让其链接性发生改变,其仅对本文件可见,对其他文件不可见。
例题:
创建三个文件:static.c static.h main.c
//static.c
#include <static.h>
void function1(void)
{
printf("Hello,word from function 1\r\n");
}
void function2(void)
{
function1();
printf("Hello,word from function 2\r\n");
}
//static.h
#include <stdio.h>
void function1(void);
static void function2(void);
//main.c
#include "static.h"
void function1(void)
{
printf("Hello,word from function main.c\r\n");
}
int main()
{
function1();
function2();
}
运行结果: