C/C++ 存储类型 作用域 连接类型
1)存储类型:
标准C语言为变量,常量和函数定义了4种存储类型:extern,auto,static,register.
这4种存储类型可分为两种生存期限:永久的(在整个程序执行期都存在)和临时的(暂时保存在堆栈和寄存器中).
extern和static用来标识永久生存期限的"变量和函数",而anto和register用来标识临时生存期限的"变量".只有变量才有临时生存期限.一个变量和函数只能具有一个存储类型,也只能有一种生存期限.
1`:默认情况下,"全局变量和全局函数"的存储类型是extern,能够被定义在它们之后的同一个编译单元内的函数所调用.如果变量或者函数被显示加上extern声明,那么其他编译单元中的函数也能调用它们.
2`:显示地声明为static的"全局变量和全局函数"具有static存储类型,只能被用一个编译单元内的函数调用.
3`:"局部变量"默认具有auto存储类型,除非用static或register类定义.但是,它们的作用域都是程序块作用域.连接类型都是内连接.在进入函数的时候被创建,函数退出时被销毁.register和auto只能用于声明"局部变量和局部常量";
4`:"全局变量"默认存储类型为static,除非在定义了它的编译单元之外的其他编译单元中显示地用extern声明.否则不能被访问.
5`:"局部符号常量(不是字面常量)"的默认存储类型为auto,除非显示地定义为static或register.
6`:"函数形参"是局部变量,因此与局部变量的存储类型一样.
P.S:
一个程序元素的存储类型与它的作用域,生存期限以及连接类型具有某种微妙的关系,但是一个具有作用域和连接类型的标识符不一定就用存储类型.
2)作用域规则:
作用域就是一个标识符能够起作用的程序范围.在标准C语言中,这些范围包括文件,函数,程序块和函数原型.在标准C++中除了这4中之外,还有两种作用域类型:类和名字空间.其中,名字空间是可以跨文件的.
P.S:
即使局部变量的存储类型声明为static,它仍然具有程序块作用域.
3)连接类型:
连接类型分为外连接,内连接,无连接3种.连接类型表明了一个标识符的可见性.
1`:如果一个标识符能够在其他编译单元中或者定义它的编译单元中的其他范围内被调用,那么它就是外连接的.
2`:如果一个标识符能在定义它的编译单元中的其他范围被调用,但是不能在其他编译单元中被调用,那么它就是内链接的.
3`:一个仅能够在声明它的范围内被调用的名字是无连接的.
参考:
《高质量C/C++编程指南—C/C++语言(第三版)》林锐
转载于:https://www.cnblogs.com/suiyu/archive/2011/11/24/2262116.html
C/C++ 存储类型 作用域 连接类型相关推荐
- doc es 中type_Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
join type概述 出现的背景 引出问题: "某头条新闻APP"新闻内容和新闻评论是1对多的关系?在ES6.X该如何存储.如何进行高效检索.聚合操作呢? 1. ES6.X 新类 ...
- 大数据BI工具Tableau学习【第三期】:数据类型,功能区和卡参考,文件类型(连接方式)
文章目录 (一) 数据类型 对比数据窗格 数据类型更改 视图更改 数据源更改 文件中数据混合数据类型 (二)功能区和卡参考 列和行功能区 隐藏行和列 显示行列 标记卡 筛选功能区 页面功能 维度变化 ...
- 第15章:存储引擎和表类型#innodb的性能调整
原贴:http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-tuning 第15章:存储引擎和表类型 目录 15.1. ...
- 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?
背景: 前段时间在百度经验看到一篇文章<如何在电脑右下角显示你(爱人)的名字>,之前也听过这个小技巧,但没真正动手设置过.所以出于好奇就实践了一下. 设置完成后的效果例如以下.右下角的时间 ...
- Redis入门第二篇【存储数据结构之string类型】
tags: Redis title: Redis入门第二篇[存储数据结构之string类型] Redis存储的数据结构 Redis支持的数据结构有好几种: It supports data struc ...
- 浅谈 MySQL 的存储引擎(表类型)
什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...
- 浅谈MySql的存储引擎(表类型)
转载自 http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体 ...
- Swift - 判端网络连接状态,连接类型(3G还是Wifi)
IJReachability是一个使用Swift写的第三方网络检测类.可以测试网络是否连接,并支持3G和Wifi的检测. 使用样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 计算机网络学习笔记(23. HTTP连接类型)
1. HTTP连接的两种类型 非持久性连接(Nonpersistent HTTP) i.每个TCP连接最多允许传输一个对象 ii.HTTP 1.0版本使用非持久性连接 持久性连接(Persistent ...
最新文章
- Yii “CDbConnection failed to open the DB connection: could not find driver解决办法
- 【风险管理】金融业务风控相关框架
- 每天学点linux之-rmdir,cp,mv
- boost::topological_sort用法的测试程序
- SAP CRM Enterprise Search 培训材料
- android开发方法数,Android减少App方法数
- 一篇文章带你快速入门JavaScript(实操代码)
- uclinux 嵌入式linux,嵌入式操作系统uCLinux
- 用原生NodeJS实现简易的静态web
- 惊呆了!JDK1.8竟然打破了我对接口的一切认知...
- Unity 后处理 性能优化
- Perl语言入门,第17章自写习题答案。
- 小米盒子服务器无信号,小米小盒子连接HDMI无信号怎么办?
- MeteoInfo介绍
- 亚洲前沿科技展望:人工智能与区块链的融合发展
- git添加文件到版本库中
- 【jdbc】 jndi与“Java:comp/env/“语法
- 文盲的Python入门日记:第二十八天,封装一个自定义爬虫类,用来执行日常的采集(二)
- python中util是哪个包_使用Python的package机制如何简化utils包设计详解
- 数字漫画行业繁花似锦,国漫扎根本土文化“向外生长”?