深入挖掘 C 语言 static 关键字
文章目录
C 语言的 static
关键字与其他面向对象语言中的 static
并不一样 。做个笔记,以防忘记。
搜索一下就知道了,C 语言中的 static 有两个作用,修饰变量
和 修饰函数
,以下具体来分析。
修饰变量
被 static
修饰的变量成为 静态变量
,那么什么是静态变量
呢?
我们知道,函数内的变量,其生命周期随函数存在,也就是函数调用过后,变量也就销毁了。所谓静态变量
,就是不随函数销毁而销毁的变量。
代码示例就很清晰:
#include <stdio.h>
void foo()
{
int normal_var = 0;
static int static_var = 0;
normal_var += 5;
static_var += 5;
printf("normal_var = %d, static_var = %d\n", normal_var , static_var);
}
int main()
{
int i;
for (i = 0; i .data 段保存的是那些已经初始化了的全局静态变量和局部静态变量。
所以静态变量
的声明周期是跟随程序的运行周期的,不会随着函数调用而销毁。
修饰函数
static 关键字还可以修饰函数,表名函数只能在当前文件中可见。什么意思?用代码表示一下就很清晰
// a.h 文件:
static int add(int a, int b );
void call_add();
// a.c
#include <stdio.h>
static int add(int a, int b ){
return a + b;
}
void call_add(){
printf("I can call_add in this %d\n",add(10,20));
}
在 a.c 文件内,add 函数被标记为 static
表示它只能被当前文件的函数调用。也就是 call_add 函数能调用它。
如果有另一个文件 b.c :
#include "a.h"
int main(int argc, char *argv[]){
call_add(10,20);
//add(10,20) ; 不能调用,因为 add 为 static
return 0;
}
在 b.c 中,是不能调用 add 函数的,这就是static 的意义所在,而其可以通过调用 a 文件的 call_add 来实现简介调用add 。 因为 call_add 是能够调用 add 的。</stdio.h></stdio.h>
文章作者 wuhuaji
上次更新 2020-02-27