变量作用域

3.文件作用域
在很多C语言书上,都没有说明文件作用域,或者只是略微的提到,其实文件作用域在较大程序中很有作用(在多文件系统中)。文件作用域是指外部标识符仅在声 明它的同一个转换单元内的函数汇总可见。所谓转换单元是指定义这些变量和函数的源代码文件(包括任何通过#include指令包含的源代码文件)。 static存储类型修饰符指定了变量具有文件作用域。

static int num;
static void add(int);

main()
{
scanf(%d,&num);
add(num)
printf(%d/n,num);
}

void add(num)
{
num++;
}

上面的程序中变量num和函数add()在声明是采用了static存储类型修饰符,这使得它们具有文件作用域,仅爱定义它们的文件内可见。
由于我们提到的大多数程序都只有一个编译文件组成,所以这种写法没有实际意义。但是实际工程上的文件有很多,它们不是由一个人写成的,由很多人共同完成, 这些文件都是各自编译的,这难免使得某些人使用了一样的全局变量名,那么为了以后程序中各自的变量和函数不互相干扰,就可以使用static修饰符,这样 在连接到同一个程序的其他代码文件而言就是不可见的。

 

下面举一个例子,把我们说到的静态变量理解一下。
求1+2+……+100的值

void add();
int result;

main()
{
int i;
result=0;
for(i=0;i<100;i++) add();
printf(%d/n,result);
}

void add()
{
static int num=0;
num++;
result+=num;
}

add()函数被调用了100次,num的值从1一直变到100,这样就可以求出它们的和了。如果写成int num=0;那就是求1+1+……+1这100个1的值了。
实际上类似的这类问题我们可以通过递归函数来解决,什么是递归,我们下一节介绍。

阅读更多
文章标签: 存储 语言 c
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭