c中static与extern的区别
2016-08-31 00:00
218 查看
摘要: c中static与extern的区别
首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。 --------------------------------------------------------------------- 先说extern 和 变量的关系。 先说只有一个文件(编译单元)的: 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的全局变量!!!! static就是刚才说的最后一种,此外就是函数内的使用了,不再多说了。 特别的,这样是错误的: a.c: static int x=10; b.c: extern int x; //因为x只在a.c中,b.c中根本看不到x,所以这个extern还是找不到x,因此会在链接时报错。 其他:extern尽量写到.h文件中,写到.c里就是错误的种子,以后它只能得到苦果!
相关文章推荐
- C语言union(联合体 共用体)
- C语言中break和continue的区别
- C语言结构体(struct)常见使用方法
- C 数据类型
- 阿里云ECS Ubuntu配置PHP开发环境
- Linux系统常用查看日志命令
- 平时对编程的思考小计
- d3.js 三坐标曲线图
- Ubuntu下vim+ctags的配置
- ubuntu SSH 连接、远程上传下载文件
- 怎么禁止实例化对象---2016-08-31
- oracle游标loop总结
- mac安装多个版本jdk
- 基于ftp实现一个类dropbox文件同步程序
- mysql分库分表
- 如何控制项目进度和质量?
- 机器人的洪流:刷库、撞库那些事儿
- C语言基础学习基本数据类型-浮点型
- 淘宝IP地址库采集
- fail-fast原理以及解决办法