欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++学习 内存模型和名称空间

程序员文章站 2022-04-07 08:42:34
1、单独编译 C++鼓励程序员将组件函数放在独立的文件中,如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接。 一般非常有用的组织程序的策略是把程序分成三部分: 头文件:包含结构声明和使用这些结构的函数的原型 源代码文件:包含与结构有关的函数的代码(函数定义) 源代码文件 ......

1、单独编译

c++鼓励程序员将组件函数放在独立的文件中,如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接。

一般非常有用的组织程序的策略是把程序分成三部分:

  • 头文件:包含结构声明和使用这些结构的函数的原型
  • 源代码文件:包含与结构有关的函数的代码(函数定义)
  • 源代码文件:包含调用与结构相关的函数的代码(主函数)

一个文件(头文件)包含了用户定义类型的定义;另一个文件(函数定义文件/库文件)包含操纵用户定义类型的函数的代码。如果编写另一个程序时,也需要使用这些函数,则只需包含头文件,这两个文件组成了一个软件包,可用于各种程序中。

  不要将函数定义或变量声明放在头文件中,这样做对于简单的情况可能是可行的,但通常会引来麻烦。例如,如果在头文件包含一个函数定义,然后在其他两个文件(属于同一个程序)中包含该头文件,则同一个程序中将包含同一个函数的两个定义,除非函数是内联的,否则将出错。下面列出了头文件中常包含的内容。

  • 函数原型
  • 使用#define定义或const定义的符号常量
  • 结构声明
  • 模板声明
  • 内联函数

 

  头文件管理

  在同一个文件中只能将一个头文件包含一次。例如,可能使用包含了另一个头文件的头文件。有一种标准的c/c++技术可以避免多次包含同一个头文件。它是基于预处理器编译指令#ifndef(即if not defined)的。下面的代码片段意味着仅当以前没有使用过预处理器编译指令#define定义名称coordin_h_时,才处理#ifndef和#endif之间的语句:

#ifndef coordin_h_

...

#endif

通常,使用#define语句来创建符号常量,如下所示:

#define maximum 4096

但只要将#define用于名称,就足以完成该名称的定义,如下所示:

#ifndef coordin_h_

#define coordin_h_

#endif

编译器首次遇到该文件时,名称coordin_h_没有定义,编译器将查看#ifndef和#endif之间的内容,并读取定义coordin_h_的一行

 

2、存储持续性、作用域和链接性

根据用于分配内存的方法,c++有3种(c++11中是4种)管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫做*存储空间或堆)。在存在时间的长短方面,以这3种(c++11是4种)方式分配的数据对象各不相同。

自动存储持续性:在函数定义中声明的变量(包括函数参数)