一.作用域
作用域描述了程序中可以访问一个标识符的一个或多个区域, 一个C变量的作用域可以是代码块作用域,函数原型作用域,或者文件作用域. 例如,整个函数体是一个代码块,一个函数内的任一复合语句也是一个代码块.在代码块中定义的变量具有代码块作用域,从该变量被定义的地方到包含该定义的代码块的末尾该变量均可见.函数的形式参量尽管在函数的开始花括号前进行定义,同样也具有代码块作用域,隶属于包含函数体的代码块.
例题1:
double blocky(double cleo)
{
double patrick = 0.0;
...
return patrick;
}
// cleo和patrick都有直到结束花括号的代码块作用域.
例题2:
double blocky(double cleo)
{
double patrick = 0.0 ;
int i;
for( i = 0;i < 10;i++)
{
double q = cleo * i; //q的作用域的开始
...
patrick *= q; //q的作用域的结束
}
...
return patrick;
}
q的作用域被限制在内部代码块内,只有该代码块内的代码可以访问q.
函数原型作用域适用于函数原型中使用的变量名.
int mighty(int mouse,double large);
从变量定义处一直到原型声明的末尾,也就是说处理一个函数原型的参数时,它所关心的只是该参数的类型;使用的名字通常是无关紧要的,不需要使他们和在函数定义中使用的变量名保持一致,名字起作用的一种情形是变长数组参量:
void use_a_VLA(int n,int m,ar[n][m]);
一个在所有函数外定义的变量具有文件作用域,具有文件作用域的变量从它定义处理包含该定义的文件结尾处都是可见的.
例题3:
#include <stdio.h>
int units = 0;
void critic(void);
int main(void);
{
....
}
void critic(void)
{
...
}
//这里,变量units具有文件作用域,在main()和critic()中都可以使用它,因为它们可以在不止一个函数中使用,文件作用域变量也被称为全局变量