标签:不能 存在 for 无法 函数作用域 区别 ++ block 允许
c/c++开发
C语言作用域分为:
如果static局部变量不初始化,他的值默认为0,static局部变量初始化只会执行一次,但可以多次赋值。
for(int i = 0;i<10 ;i++){
static int a = 1;
a++ ;
}
上面这段代码中,static虽然在for循环内,但它只会初始化一次,但a++可多次使用。
如果使用普通全局变量时,在前面找不到此普通全局变量的定义,则需要声明后才可使用。
void fun(){
extern int a ;
a = 10 ;
}
int a = 1 ;
int main(){
printf("a = %d",a) ;
return 0 ;
}
如上面代码段中,普通全局变量a定义在fun函数后面, 所以需要在fun函数内使用extern声明普通全局变量a的存在。
函数中,程序员写的全局变量a是有第三次被系统认为是定义,其他的都是声明。对于全局变量b没有初始化,有两个是声明,一个是定义,但我们无法确定哪一个b是定义,哪两个是声明。不过c++对这里做了优化,不允许我们这么做,但是c允许,所以这里是C语言中全局变量的一点缺陷。
int a ;
int a ;
int a = 1 ;
int a ;
//
int b ;
int b ;
int b ;
int main(){
return 0 ;
}
extern关键字不能使用。
一个文件只能有一个同名static全局变量的定义,一个文件不能出现多个。多个文件中可以存在相同名字的static全局变量。
static全局变量只能在当前文件使用。如在main.c文件中有一个static int a ;在tast.c中就不能使用main.c中的全局变量a。
全局变量不安全,能够不用的话就尽量不用!
标签:不能 存在 for 无法 函数作用域 区别 ++ block 允许
原文地址:https://www.cnblogs.com/warm-home/p/12842940.html