在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文件中实现了就行。
编程时,把需要在其它文件中使用的全局变量和函数在其头文件中声明,使用时包含此头文件,尽量不要在头文件中定义变量和函数。