zoukankan      html  css  js  c++  java
  • 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种)方式分配的数据对象各不相同。

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

  • 相关阅读:
    [转]老男孩读pcie
    nand
    面试题目汇总
    redis的tcp-backlog配置
    Redis 3.0.4 sentinels
    Redis 3.0.4 客户端
    Redis 3.0.4 事件驱动
    Redis 3.0.4 AOF持久化
    Redis 3.0.4 数据库
    Redis 3.0.4 RDB持久化
  • 原文地址:https://www.cnblogs.com/jiweilearn/p/10626111.html
Copyright © 2011-2022 走看看