先说只有一个文件(编译单元)的:
int i=10; //这个是定义一个全局变量,值为10
extern int i=10; //这个是错误的,变量已经存在,怎么赋初值呢?
extern int i; //这个和第一句 int i=10; 可以同时存在在一个文件中。
再说跨文件(多个编译单元)的:
文件一:(假设这个文件没有错误!!)
int a=10;
文件二:
extern int a; // 这个正确
extern float a; // 这个编译不会错,赋值会怎样呢?
extern int b; //这个找不到
int a=9; //这个出错,全局变量多次定义
int a; //同上
static int a=9; //这个正确,这个产生一个仅在文件二中有效的全局变量a,初值为9,注意在文件二中将看不到那个值为10的全局变量!!!!