extern只是声明,不是定义。
static却是是定义
#include <stdio.h>
int a=3;
int b=4;//非晶态全局变量,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同 //一源程序的其它源文件中不能使用它
static int d=5;//静态全局变量
extern int c;//提示编译器c在别的文件中定义,这里先拿来用
int main(void){
printf("a is %p\n",&a);//这个a是全局变量a
static int a;//重新定义了a
printf("static a is %p\n",&a);//地址发生了变化
printf("b is %p\n",&b);
extern int b;//这个b还是全局变量b,不过没这样用extern的,这里只是测试一下,说明没有语法错误
printf("extern b is %p\n",&b);//地址没变
printf("c is %d\n",c);//能通过编译,但是如果在链接的时候,别的文件中没找到c的定义,则报错
}