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文件中找到这个同名的全局变量。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。