关于C语言的作用域。
作用域即作用范围,是所定义的标识符在那个区间内有效;不同的标识符的作用域是不同的;C语言的作用域往往分成四种类型:①块(局部)作用域②文件(全局)作用域③函数原型作用域④函数作用域。
C语言把花括号括起来的一部分的程序叫做块。在每一个块中说明的标识符的作用域从该说明点开始到该块结束为止。
eg1:float f(int a)
{
int b,c;
}
如上定义的a,b,c只在f函数中有效。
eg2:int main()
{
int m,n;
}
如上的m,n仅在main()函数中有效。
如下是块作用域例:
#include
void swap(int a,int b)
{
printf("%d\t%d\n",a,b);
if(a
如上程序跑出来可以说明:不同函数或块中的同名变量占不同的内存单元。
下面再举例子,来说明其中的一个原则:局部定义优先!
#include
int main()
{
int a=1,b=2;
++a;++b;
{
int b=4,c;
c=a+b;
printf("a=%d,b=%d\n",a,b);
}
printf("a=%d,b=%d\n",a,b);
return 0;
}
如上,程序会跑出如下结果:
a=2,b=4
a=2,b=3
对上述代码进行分析:c只能在该复合语句中使用;且复合语句中定义的变量b屏蔽了复合语句外定义的变量b。
下面。描述文件作用域和全局变量
文件作用域的变量是在所有的函数外说明的。
在函数外定义的变量称为全局变量,其作用域为从定义位置到其所在的文件结束。
通常把超出一个函数的作用域称为全局作用域,不超过一个函数的作用域称为局部作用域。
设置全局变量的作用是增加数据联系的渠道,减少在函数之间传递数据的时间损耗。
对全局变量的说明:当在块作用域内的变量与全局变量同名时,局部变量优先,全局变量被屏蔽;当全局变量出现先引用后定义时,要用"extern"对其做外部说明。
关于全局变量,我建议少使用,原因如下:
1.全局变量在程序全部执行的过程中占用存储单元;2.降低了函数的通用性、可靠性、可移植性;3.降低程序清晰性,容易出错。
关于全局变量与局部变量同名的例子:
#include
int a=3,b=5;
int max(int a,int b)
{
int c;
c=a>b?a:b;
return (c);
}
int main()
{
int a=8;
printf("max=%d",max(a,b));
return 0;
}
输出结果为: max=8
原因是局部优先,前面提到过!
全局变量作用域的拓展:
用extern对全局变量的作用域拓展的两种方式为:
1.将全局变量的作用域拓展到定义它之前
2.将某个源文件中全局变量的作用域拓展到其他源文件中
文件及间对全局变量的作用于拓展的限制:
拓展全局变量时应注意:执行一个文件中的函数时全局变量的值可能会改变,进而影响其在另一个文件中的使用;为了限制文件间的全局变量的作用域被拓展,应在定义全局变量时加一个"static"说明!
用static限制全局变量作用域被拓展:
在定义全局变量时加一个static声明,则这些全局变量只能被本文件使用,不能被其他文件引用。
比如:
//f1.c中内容
static int A;
int main()
{
}
//f2.c中内容
extern int A;
int power(n)
{
}
//在加static后,f2.c文件无法使用f1.c中的全局变量A
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)