用代码说明:
///myfun.c文件///
int b = 123; ①
int out_c = 315;
static double PI=
3.14159; //myfun.c文件以外的文件是不能访问PI变量的
int Add(const int first,
const int second)
{
return first + second;
}
//End myfun.c file
/test.c
文件///
#include ..
int
b;② //等价于extern int
b;即定义在myfun.c中的变量b
//最好写成extern int b;易于理解,这种简写模式只适用于全局作用域
//对于函数作用域是不能简写的,否则成了定义函数的局部变量。
int main(void)
{
extern int
b;③ //external(外部链接)属性的b,其作用域起于此声明处止于语句④之前
printf("%d\n",b); //输出:123
//函数的局部变量,链接属性为none;④处的变量b会屏蔽掉③处的变量b,
int b = 456;
④
//④处变量b的作用域起于其定义处,止于函数结束
printf("%d",b); //输出: 456
extern int
b;⑤
//编译器将extern
int b解析成:在已经定义的int b = 456
(④)基础
//上加了一个extern属性。C规定:在已经定义变量上加任何链接属性都不
//会改变变量的原链接属性。给b上加extern属性并不会使none链接属性变
//成extern链接属性。
printf("%d",b); //所以输出: 456
extern int
out_c;//绝对不能简写成int out_c;否则是定义函数作用域的变量
printf("%d",out_c); //输出:315
return
0;
}