• 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种)方式分配的数据对象各不相同。

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

  • 相关阅读:
    NetCore实现404和500状态码自定义处理页面
    分享一款好玩的工具
    React三大属性
    谷歌浏览器安装react-developer-tools报错
    初次使用create-react-app
    聊聊webservice
    对java一点感悟
    设计模式之二策略模式(java实现)
    设计模式之一单例模式(java实现)
    java回调函数
  • 原文地址:https://www.cnblogs.com/jiweilearn/p/10626111.html
Copyright © 2020-2023  润新知