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\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的定义,则报错
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM