在c语言中,定义在所有函数之外的变量称全局静态变量,具有外部连接性,全局性,全程序存储期。
换成人话,就是可以在定义之前进行调用,只需要进行extern的声明即可。
所有函数可调用。
同时,只要程序还在执行,它就不会被抹除。
当外部变量被static修饰,就发生了变化,此时它被成为外部静态变量,这个词简直就是误导,此外部就不是文件外部,而是函数外部了,也就是说,这个变量不能用在其定义之前的代码使用,也不能被跨文件使用,哪怕用extern修饰的声明也是不可以的。
在多文件编译的时候,一个非static修饰的全局静态变量只能被定义一次,其他文件想要使用此变量,需要用extern进行修饰声明。
但是,static修饰的外部静态变量则可与上面的全局静态变量使用一个名字,且此文件作用域内,静态变量的值一定是static修饰的变量的值,而非其他。
#include
int main()
{
extern int traveler; //正确,traveler没有被static修饰,是外部连接的。
extern int stayhome; //错误,stayhome被static修饰,是内部连接的,只在定义之后可用,不可向前调用。
printf("%d %d\n", traveler, stayhome);
return 0;
}
int traveler = 1;
static int stayhome = 1;
这有什么用?我的想法是经static修饰的全局静态变量,不会干扰其定义前的头文件中的变量内容,想象,一旦一个全局变量定义后,可以在前后引入的所有文件都可用,绝对是一件很可怕的事情,如果涉及文件太多,那就是幽灵般的存在,此时一不小心引入的bug,恐怕十分难缠。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)