浅谈static与extern区别

在C语言中:
static是修饰变量和函数

  1. 修饰局部变量-静态局部变量

static修饰局部变量提升了变量的生存周期,让静态局部变量出了作用域依然存在,直到程序结束,生命周期才结束。

例如:

#include <stdio.h>
void test(){
	int i=0;   
	i++;
	printf("%d ", i);
}
int main(){
	for(i=0; i<10; i++){
		test();    
	}
return0;
}

编译结果:
在这里插入图片描述
如果将代码改动,

void test(){
	static int i=0;   
	i++;
	printf("%d ", i);
}

则编译结果为
在这里插入图片描述

  1. 修饰全局变量-静态全局变量

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

  1. 修饰函数-静态函数

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

extern:可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。

  1. 修饰变量

举例来说,如果文件text.c需要引用add.c中变量int a,就可以在text.c中声明extern int a,然后就可以引用变量a

例如:
在这里插入图片描述
同时需要注意的是变量的作用域
例如:

如果将声明外部符号放在函数中,那么只能在func函数的作用域中引用g_val变量

在这里插入图片描述
2. 修饰函数

从本质上来说,和变量没什么区别,函数名就是函数指针,指向函数的存储位置。

例如:
在这里插入图片描述

发布了50 篇原创文章 · 获赞 19 · 访问量 4746

猜你喜欢

转载自blog.csdn.net/qq_44723296/article/details/96482955
今日推荐