1、C++项目结构

C++程序的一般组织架构

  1. 类声明文件(.h文件)
  2. 类实现文件(.cpp文件)
  3. 类的使用文件(main()所在的.cpp文件)

用工程组合各文件

2、编译链接

编译链接过程

3、外部变量/外部函数/命名空间

外部变量

  1. 除了在定义它的源文件中可以使用外,还能被其他文件使用
  2. 文件作用域中定义的变量,默认情况下都是外部变量
  3. 在其他文件中如果需要使用,需要用extern关键字声明

外部函数

  1. 在所有类外声明的函数(非成员函数),都是具有文件作用域的
  2. 这样的函数可以在不同的编译单元中被调用
  3. 只要在调用之前进行引用性声明(声明函数原型)即可。

将变量和函数限制在编译单元内

  • 在匿名命名空间中定义的变量和函数,都不会暴露给其他编译单元
  • namespace{//匿名的命名空间
    int n;
    void f(){
    n++;
    }
    }

4、标准C++库

5、编译预处理

  1. #include包含指令

    1. 将一个源文件嵌入到当前源文件中该点处
    2. #include<文件名>
      1. 按标准方式搜索,文件位于C++系系统目录的include子目录下
    3. #include"文件名"
      1. 首先在当前目录中搜索,若没有,再按标准方式搜索
  2. #define宏定义指令
    1. 定义符号常量,很多情况下已被const定义语句取代
    2. 定义带参数宏,已被内联函数取代
  3. #undef
    1. 删除由#define定义的宏,使之不再起作用
  4. #if#endif(条件编译指令)
    1. 一般用在.h文件中,防止头文件被重复包含,防止变量被重复定义。或者根据常量表达式进行“部分编译”“执行部分程序”
    2. #if 常量表达式
      //当“常量表达式”非零时候编译
      这里是程序正文
      #endif
    3. #if 常量表达式
      //当“常量表达式”非零时候编译
      这里是程序正文1
      #else
      //当“常量表达式”为零时候编译
      这里是程序正文2
      #endif
    4. #ifdef 标识符
      程序段1
      #else
      程序段2
      #endif
      /*
      如果“标识符”经#define定义过,且未经#undef删除,
      则编译程序段1,否则编译程序段2
      */
    5. #ifndef 标识符
      程序段1
      #else
      程序段2
      #endif
      /*
      如果“标识符”未被定义过,
      则编译程序段1,否则编译程序段2
      //一般用在.h文件中,防止头文件被重复包含
      */

参考:C++语言程序设计(第5版),郑莉,清华大学

最新文章

  1. ubuntu 安装transmission最新版
  2. 在Visual Studio中使用正则表达式匹配换行和批量替换
  3. iOS使用Workspace来管理多项目
  4. poj 1159 (DP LCS)
  5. 读《编写高质量代码-Web前端开发修炼之道》笔记
  6. Codeforces 633D Fibonacci-ish 暴力
  7. Java学习日记-7 抽象类和接口
  8. Java 之文件目录操作
  9. 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
  10. BAK文件怎么恢复到数据库中
  11. 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
  12. 【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
  13. memcached常用命令
  14. UVALive 2474 Balloons in a Box(枚举)
  15. 3-2 Hadoop集群伪分布模式配置部署
  16. VUE-Windows系统下搭建vue环境
  17. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用
  18. 下载chrome插件和离线安装CRX文件的方法
  19. Lecture 5
  20. App常见产品问题及预防方法

热门文章

  1. celery+redis的使用(异步任务、定时任务)
  2. Vue项目中怎样把参数(对象)转成formdata传给后端? 封装函数 亲测有效
  3. CryptoKit 实现 椭圆曲线ECC加密
  4. 洛谷 P4048更新题面
  5. 使用elemeng-plus控制台报错:$weight
  6. Kubernetes 1.26.0 集群部署Prometheus监控
  7. 安装archlinux系统
  8. 微服务笔记之Euraka(2)
  9. WCF教程 简单入门
  10. 使用win10 wsl中的Debian编译lean 的 lede