1.作用域描述程序中可访问标识符的区域。一个c变量的作用域可以是块作用域(是用一对花括号括起来的代码区域),函数作用域(仅用于goto语句的标签),函数原型作用域(用于函数原型中的形参名)或文件作用域(该文件作用域变量也叫全局变量)
2.c变量有3种链接属性:外部链接,内部链接或无连接。具有块作用域,函数作用域或函数原型作用域的变量都是无链接变量。具有文件作用域的变量都是外部或内部链接。(通常把内部链接的文件作用域简称为“文件作用域”,把外部链接的文件作用域简称为“全局作用域”,或“程序作用域”。
int ret=5;//文件作用域,外部链接 static reu=8;//文件作用域,内部链接 该文件和同一程序的其它文件都可使用变量ret。但变量reu属于文件私有,该文件中任意函数可以使用。
3.作用域和链接描述了标识符的可见性,储存期描述了通过这些标识符访问的对象的生存期。c语言有4种储存期:静态储存期,线程储存期,自动储存期,动态分配存储期。
静态储存期:若对象具有静态储存期,它在程序执行时一直存在。(static表明了链接属性,不是储存期)列如static修饰的文件作用域变量具有内部链接,但无论内部链接和外部链接,文件作用域变量都具有静态存储期。
线程存储期:用于并发程序设计,程序执行可被分为多个线程。具有线程存储期的对象,从被声明到线程结束一直存在。
自动存储期:属于自动存储的类别的变量具有自动存储期,且具有块作用域,无链接。
#includeint main() { int x=10;//原始的x int j=0; for(i=0;i<4:i++) { int x=8;//新的x,隐藏了原来的x printf("%dn",x+i); } while(x>5)//原始的x { x--; } printf("%d",x); return 0 }
块作用域的静态变量
#includevoid list(); int main() { int count 0; for(count=0;count<=4;count++) { printf("%d",count); } list(); return 0; } void list() { int j=0; static int k=1; j++; k++; printf("%d %d",j,k); //j每次都为1,static保存了k的值,会增加 }
extern:不能创建外部的定义,只能引用现有的外部定义
extern int w;//引用式声明,外部链接
static h=0;//静态定义,内部链接
int count=0;//文件作用域,外部链接
int main()
{ int i=0;//自动变量(局部变量)
register int k;//寄存器变量
static int u=0;//静态,无链接
return 0;
}



