c语言的static和extern关键字
来源:互联网 发布:java基础面试 编辑:程序博客网 时间:2024/04/30 06:00
在c语言中经常会使用static(静态的)和extern(外部的)关键字,但是如果使用不当可能会对程序的设计带来麻烦,这里作些介绍。
一、声明或定义变量
1、局部变量:
用static在函数内部定义的变量是静态局部变量,存储在内存的静态/全局区,其生命周期是整个源程序。但是作用域与自动变量相同,只能在该函数中使用,退出函数后,此变量继续存在,但不可使用。若不给静态局部变量赋值,则系统自动赋值0(自动变量初值随即)。
2、全局变量
全局变量默认的是extern型的,如果定义时加static则为静态全局变量。如果不给全局变量赋初值,一般系统会自动赋值0。
(1) extern全局变量,可以被其它源文件中的函数调用,但是在调用它的文件中必须用extern再次声明此变量,或者是直接把此全局变量放在头文件中,在需要调用它的文件中包含此头文件。
(2)static全局变量,生命周期是整个源程序,存放在静态/全局区,但只能在其所在的源文件中被使用。
二、声明或定义函数
1、static(静态)函数
静态函数的生命周期也是整个源程序,但作用域也是其所在的源文件。
2、extern型函数
函数默认的是extern型的,其它文件中需要调用extern型的函数时,需要在使用前用extern再声明一下此函数,或者包含声明过此函数的头文件。在.c文件中声明外部函数时必须使用extern关键字,而在头文件中extern关键字可有可无,只要在某个.c文件中实现了就行。
编程时,把需要在其它文件中使用的全局变量和函数在其头文件中声明,使用时包含此头文件,尽量不要在头文件中定义变量和函数。
一、声明或定义变量
1、局部变量:
用static在函数内部定义的变量是静态局部变量,存储在内存的静态/全局区,其生命周期是整个源程序。但是作用域与自动变量相同,只能在该函数中使用,退出函数后,此变量继续存在,但不可使用。若不给静态局部变量赋值,则系统自动赋值0(自动变量初值随即)。
2、全局变量
全局变量默认的是extern型的,如果定义时加static则为静态全局变量。如果不给全局变量赋初值,一般系统会自动赋值0。
(1) extern全局变量,可以被其它源文件中的函数调用,但是在调用它的文件中必须用extern再次声明此变量,或者是直接把此全局变量放在头文件中,在需要调用它的文件中包含此头文件。
(2)static全局变量,生命周期是整个源程序,存放在静态/全局区,但只能在其所在的源文件中被使用。
二、声明或定义函数
1、static(静态)函数
静态函数的生命周期也是整个源程序,但作用域也是其所在的源文件。
2、extern型函数
函数默认的是extern型的,其它文件中需要调用extern型的函数时,需要在使用前用extern再声明一下此函数,或者包含声明过此函数的头文件。在.c文件中声明外部函数时必须使用extern关键字,而在头文件中extern关键字可有可无,只要在某个.c文件中实现了就行。
编程时,把需要在其它文件中使用的全局变量和函数在其头文件中声明,使用时包含此头文件,尽量不要在头文件中定义变量和函数。
- c语言的static和extern关键字
- C语言的static和extern关键字的使用
- c语言中的static和extern关键字
- c语言中的static和extern关键字
- c语言中的static和extern关键字
- c语言中static和extern关键字
- C语言(五)extern和static关键字
- c语言--static和extern关键字
- C语言 static和extern关键字 对函数的作用
- C语言 static和extern关键字 对变量的作用
- c语言的链接属性和static、extern关键字
- C语言 static和extern关键字 对函数的作用
- C语言 static和extern关键字 对变量的作用
- c语言中static关键字和extern关键字
- c语言中的static和extern关键字总结
- C语言关键字——extern和static
- [黑马程序员][C语言]static和extern关键字
- 【C语言学习笔记】关键字:typedef、static和extern
- android调用ffmpeg
- 【C语言助教】统计每个月过生日的人数,120个人的,随机产生这些人的生日的月份。
- 设计模式之享元模式
- c3p0配置
- OpenGL 绘制函数图象
- c语言的static和extern关键字
- 数组字符串问题------求数组前k小的元素,及其应用
- 看淘宝大牛们晒一晒淘宝网技术内幕
- 【C语言助教】输入一行文本,其中包含多个单词,找出最长的单词长度
- 记录:android中imageview.ScaleType详细说明
- VS2010快捷键大整理
- WIN7管理工具配置ODBC数据源-系统DSN中无Oracle,Sybase驱动的解决方法
- DTD
- #、##和__VA_ARGS__