到这里解决了一个文件内变量的作用域,那么如果有两个或多个文件想共同使用一个变量(在某个文件中声明的)
函数参数无能为力了!其实作用域是相对一个文件内的变量而言的!
这时来了变量的链接!
链接
1.外部连接(external linkage)
2.内部连接(internal linkage) static
3.空连接(no linkage)
作用域和链接的关系:
1.具有代码块作用域或函数原型作用域的变量具有空连接,表示他们被代码块或函数私有
2.具有文件作用域的变量可能有内部或外部连接
一个具有外部连接的变量可以被多个文件共享,解决了!
一个具有内部连接的变量可以象全局变量一样在一个文件的任何地方使用 (但是必须是文件作用域的变量被 说 明成内部连接,如果不是,就还是不能在一个文件的任何地方使用)
例如
int g_var = 5; //文件作用域,外部连接 //如果在别的文件中使用那么使用extern int g_var来声明,不然会提示g_var未 //定义,使用了extern来声明,就不用#include了 extern并不是定义时的关键字
static int g_static=3; //文件作用域,内部连接
int main()
{...}
和该文件属于同一程序的其他文件都可以使用变量g_var,而g_static是该文件私有的
说明连接是用来区别文件作用域的
例如:main
#include
<
stdio.h
>
void Print( void );
/**/ //
// global variable
int main_scop = 0 ;
/**/ //
int main()
... {
for(int i=0;i<2;i++)
...{
Print();
}
return 0;
}
void Print( void );
/**/ //
// global variable
int main_scop = 0 ;
/**/ //
int main()
... {
for(int i=0;i<2;i++)
...{
Print();
}
return 0;
}
other.cpp
#pragma
once
extern int main_scop; // 来声明对main_scop的引用
#include < stdio.h >
void Print( void )
... {
printf("%d ",main_scop);
}
extern int main_scop; // 来声明对main_scop的引用
#include < stdio.h >
void Print( void )
... {
printf("%d ",main_scop);
}
在other.cpp中声明了main_scop
不然main_scop 虽然能被多个文件使用,但是在other.cpp中还是不能使用的.
必须有extern int main_scop;