首页 > 代码库 > C语言存储类关键字

C语言存储类关键字

1、static

这个关键字有三种用法:

(1)第一种是用来修饰局部变量,使之成为静态局部变量;静态局部变量存储在数据段/bss段中,作用域是代码块作用域,生命周期是程序生命周期,链接属性是无连接。静态局部变量只初始化一次,以后使用时的值是上次使用后的值(类似全局变量)

(2)第二种是用来修饰全局变量,使之成为静态全局变量;静态全局变量存储在数据段/bss段中,作用域是文件作用域,生命周期是程序生命周期,链接属性是外链接。static修饰的全局变量只在定义它的源文件内有效,在同一源程序的其它源文件内不可使用,利用此特性可以避免多文件变量重名的问题。

(3)第三种是用来修饰函数,使之成为静态函数;静态全局变量存储在数据段/bss段中,作用域是文件作用域,生命周期是程序生命周期,链接属性是内链接。static修饰的函数只在定义它的源文件内有效,在同一源程序的其它源文件内不可使用,利用此特性可以避免多文件函数重名的问题。

(4)在多个源文件的程序中,只在一个源文件使用的函数或者全局变量应该加static关键字加以说明。

2、auto

这个关键字只有一种用法:

只能用来修饰局部变量,使之成为自动局部变量,自动局部变量存储在栈上,其实我们平常定义的局部变量就是自动局部变量,只是我们把auto关键字省略了;可见,定义普通的局部变量默认就是auto关键字修饰的局部变量。

3、extern

(1)这个关键字常用来声明全局变量;目地是在多文件项目中在a.c中定义全局变量而在b.c中使用这个全局变量;

(2)因为C语言程序编译时是以单个.c文件为单位编译的,如果不声明直接使用,编译器就会报错误,解决方案就是使用extern关键字声明(注意声明时不能赋值,否则会出现错误:重复定义)

(3)应该在b.c中使用这个全局变量之前声明这个全局变量,告诉编译器我在别的文件中定义了这个全局变量,并且原型和声明一样,这样链接时链接器就会去别的.o文件中找到这个同名的全局变量。


C语言存储类关键字