林锐:5 C++/C程序的基本概念
2013-11-05 15:48
253 查看
5.1.1
main
不能重载
不能内联
不能定义为static
不能取其地址
不能由用户直接调用
5.1.3内部名称
struct Sample_1
{
int count;
};
struct Sample_2
{
int count;
};
区分两个struct的同名成员count:“通过它们各自的对象和成员标识符就可以区分”,但是这只是源代码级或者说是形式上的区别。
对于语言来说,这两个同名成员代表两块不同的内存单元,而名字则是引用这两块内存单元的别名,因此为了区分开不同的内存单元就必须区分开他们的别名。否则连接时就会导致二义性,解决的办法就是Name-Mangling(在他们面前分别添加所属的类型的名称作为前缀,如_Sample_1_count)
5.1.4
声明:就是向系统介绍名字(而一个名字就是一块内存区的别名),告诉编译器这个名字的值的类型及宣告该名字的存在性,仅此而已。名字的类型有两个用途:一是用于静态类型检查,二是教导编译器如何解释它所代表的内存区(大小),以便为其引用语句生成合适的目标代码。例如函数原型就是告诉编译器该函数已经在程序的某个范围(其被定义的源文件或库)中定义了,因此其调用语句被转换为一条call指令。声明只为编译器所使用,因此不会生成目标代码,当然也需要给它分配存储空间,更不会增大可执行程序的体积。
定义:分配空间。对于变元(变量和对象)编译器确定它应该占用多少存储单元,并在虚拟地址空间中产生存放它的内存空间;对于函数,编译器为之生成可执行代码,并为其分配内存空间。类型定义、内联函数定义等不在此列。
由于声明并不会分配存储,因此只要你需要,同一个声明可以在整个程序中出现任意次,这就是重复声明。例如,每包含一个头文件,实际上是将其中的名字多声明一次,因为他们是内链接的。
但是定义不同,因为一个名字只能分配一次存储空间,否则不仅浪费空间而且会造成二义性,所以只能定义一次,这就是一次定义规则(ODR)。这也是我们建议不要把函数定义,变量定义放在头文件的原因之一(另一个原因是他们是外链接的)
main
不能重载
不能内联
不能定义为static
不能取其地址
不能由用户直接调用
5.1.3内部名称
struct Sample_1
{
int count;
};
struct Sample_2
{
int count;
};
区分两个struct的同名成员count:“通过它们各自的对象和成员标识符就可以区分”,但是这只是源代码级或者说是形式上的区别。
对于语言来说,这两个同名成员代表两块不同的内存单元,而名字则是引用这两块内存单元的别名,因此为了区分开不同的内存单元就必须区分开他们的别名。否则连接时就会导致二义性,解决的办法就是Name-Mangling(在他们面前分别添加所属的类型的名称作为前缀,如_Sample_1_count)
5.1.4
声明:就是向系统介绍名字(而一个名字就是一块内存区的别名),告诉编译器这个名字的值的类型及宣告该名字的存在性,仅此而已。名字的类型有两个用途:一是用于静态类型检查,二是教导编译器如何解释它所代表的内存区(大小),以便为其引用语句生成合适的目标代码。例如函数原型就是告诉编译器该函数已经在程序的某个范围(其被定义的源文件或库)中定义了,因此其调用语句被转换为一条call指令。声明只为编译器所使用,因此不会生成目标代码,当然也需要给它分配存储空间,更不会增大可执行程序的体积。
定义:分配空间。对于变元(变量和对象)编译器确定它应该占用多少存储单元,并在虚拟地址空间中产生存放它的内存空间;对于函数,编译器为之生成可执行代码,并为其分配内存空间。类型定义、内联函数定义等不在此列。
由于声明并不会分配存储,因此只要你需要,同一个声明可以在整个程序中出现任意次,这就是重复声明。例如,每包含一个头文件,实际上是将其中的名字多声明一次,因为他们是内链接的。
但是定义不同,因为一个名字只能分配一次存储空间,否则不仅浪费空间而且会造成二义性,所以只能定义一次,这就是一次定义规则(ODR)。这也是我们建议不要把函数定义,变量定义放在头文件的原因之一(另一个原因是他们是外链接的)
相关文章推荐
- 《Linux C一站式学习》第一章 程序的基本概念
- 计算机程序的思维逻辑 (35) - 泛型 (上) - 基本概念和原理
- Python Flask Web 第一课 —— 基本概念和程序的基本结构
- JAVA中程序包的基本概念
- 基本概念之二操作系统(计算机管理控制程序OS:Operation System)
- 程序设计基本概念——运算符
- 程序设计基本概念
- 1.Win32基本程序概念
- [Win32] 服务程序开发(1)基本概念和服务程序的框架
- 谷歌浏览器扩展程序开发教程之基本概念
- 线程的基本概念 / 计算机程序的思维逻辑
- Linux下静态库_库的基本概念;如何生成静态库动态库;nm查看库中包含那些函数、ar生成静态库,查看库中包含那些.o文件、ldd查看程序依赖的.so文件;gcc/g++与库相关的参数-L,-l,-f
- JAVA中程序包的基本概念
- Objective-C基础笔记(1)基本概念和第一个程序
- 程序设计基本概念(5) 面向对象
- 第一部分C语言入门 第一章 程序的基本概念
- MFC程序开发的基本概念
- 汇编程序基本概念 笔记
- Windows Phone 程序的基本概念和架构
- js程序设计01——基本概念