C语言中static、exterrn关键字的用法

    在大一学习的时候,只学习了C语言的基本的语法,并没有学习和使用过static、external等关键字,所以现在总结一些以前没有用到或很少用过的知识点。

 一.存储类型的基本概念和static修饰局部变量的用法

变量的存储类型是指存储变量的内存类型。有三个地方可以存储变量:普通内存运行时堆栈、硬件寄存器。

普通内存:凡是在代码块之外声明的变量总是存储于静态内存中,在程序的整个执行期间始终存在。

运行时堆栈:在代码块内部声明的变量默认存储于堆栈中,当程序执行到声明代码块时被创建,离开块被销毁。如果该代码块被数次执行,这些变量每次将会被重新创建。

硬件寄存器变量暂时不需要考虑。

如果想要在代码块内部声明的变量在离开代码块后不会被销毁,下一次执行还要继续使用,可以在变量的声明中加入static关键字。一个例子:

#include <stdio.h>
void Func();
int main()
{
	Func();
	Func();
	Func();
	system("pause");
	return 0;
}
void Func()
{
	static int a = 0;//执行结果  1 、 2 、 3
	//int a = 0;    // 执行结果  1 、 1 、 1
	a += 1;
	printf("%d\n" , a);
}

上面的代码中加入static的声明的变量,在离开代码块再次进入代码块依然被保留。

总结:static关键字在代码块内部用于变量的声明时,static关键字用于修改变量的存储类型变为存储在静态内存中的静态变量。

注意:虽然修改了变量的存储类型,但没有改变局部变量的作用域,依然不能再其他代码块中使用这个变量,只能在当前代码块中访问。

二.链接属性的基本概念和static、extern修改链接属性的用法

     上面第一条中的static的一种用法只能修饰在代码块内部的局部变量,改变其存储类型,static关键字还有其他的用法。

     标识符的链接属性决定如何处理在不同文件中出现的同名标识符。链接属性一共三种 external(外部)、internal(内部)、none(无)。

    一般来说函数、全局变量的链接属性是external。

   static关键字可以将链接属性由external改变为internal,使全局变量和函数为当前源文件私有。其他文件中也有同名的变量和这个私有的无关。static关键字只对缺省为external的标识符生效。

   extern加在变量(全局变量)或函数的声明前,表示“这个变量或函数在别处定义,要在此处引用”。

  函数和全局变量的声明不加extern也可能可以正确地引用,但是最好还是加上extern。

 三.总结   

extern:用于声明变量(函数)告诉编译器,这个变量(函数)在其他地方有定义。   

static:1.修饰局部变量,改变变量的存储类型,使其在整个程序执行期间始终存在。

            2.修饰全局变量,改变变量的链接属性,由external改为internal,使其只能在当前源文件使用。

            3.修饰函数:同上。                                       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值