static和extern的区别

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 ",&a);//这个a是全局变量a
static int a;//重新定义了a
printf("static a is %p ",&a);//地址发生了变化
printf("b is %p ",&b);
extern int b;//这个b还是全局变量b,不过没这样用extern的,这里只是测试一下,说明没有语法错误
printf("extern b is %p ",&b);//地址没变

printf("c is %d ",c);//能通过编译,但是如果在链接的时候,别的文件中没找到c的定义,则报错
}

原文地址:https://www.cnblogs.com/saolv/p/7761021.html