【C++复习】5.7 多文件结构与编译预处理命令
2024-10-21 14:19:27
1、C++项目结构
C++程序的一般组织架构
- 类声明文件(.h文件)
- 类实现文件(.cpp文件)
- 类的使用文件(main()所在的.cpp文件)
用工程组合各文件
2、编译链接
编译链接过程
3、外部变量/外部函数/命名空间
外部变量
- 除了在定义它的源文件中可以使用外,还能被其他文件使用
- 文件作用域中定义的变量,默认情况下都是外部变量
- 在其他文件中如果需要使用,需要用extern关键字声明
外部函数
- 在所有类外声明的函数(非成员函数),都是具有文件作用域的
- 这样的函数可以在不同的编译单元中被调用
- 只要在调用之前进行引用性声明(声明函数原型)即可。
将变量和函数限制在编译单元内
- 在匿名命名空间中定义的变量和函数,都不会暴露给其他编译单元
namespace{//匿名的命名空间
int n;
void f(){
n++;
}
}
4、标准C++库
5、编译预处理
#include
包含指令- 将一个源文件嵌入到当前源文件中该点处
- #include<文件名>
- 按标准方式搜索,文件位于C++系系统目录的include子目录下
- #include"文件名"
- 首先在当前目录中搜索,若没有,再按标准方式搜索
#define
宏定义指令- 定义符号常量,很多情况下已被const定义语句取代
- 定义带参数宏,已被内联函数取代
#undef
- 删除由#define定义的宏,使之不再起作用
#if
和#endif
(条件编译指令)- 一般用在.h文件中,防止头文件被重复包含,防止变量被重复定义。或者根据常量表达式进行“部分编译”“执行部分程序”
#if 常量表达式
//当“常量表达式”非零时候编译
这里是程序正文
#endif#if 常量表达式
//当“常量表达式”非零时候编译
这里是程序正文1
#else
//当“常量表达式”为零时候编译
这里是程序正文2
#endif#ifdef 标识符
程序段1
#else
程序段2
#endif
/*
如果“标识符”经#define定义过,且未经#undef删除,
则编译程序段1,否则编译程序段2
*/#ifndef 标识符
程序段1
#else
程序段2
#endif
/*
如果“标识符”未被定义过,
则编译程序段1,否则编译程序段2
//一般用在.h文件中,防止头文件被重复包含
*/
参考:C++语言程序设计(第5版),郑莉,清华大学
最新文章
- ubuntu 安装transmission最新版
- 在Visual Studio中使用正则表达式匹配换行和批量替换
- iOS使用Workspace来管理多项目
- poj 1159 (DP LCS)
- 读《编写高质量代码-Web前端开发修炼之道》笔记
- Codeforces 633D Fibonacci-ish 暴力
- Java学习日记-7 抽象类和接口
- Java 之文件目录操作
- 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
- BAK文件怎么恢复到数据库中
- 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
- 【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
- memcached常用命令
- UVALive 2474	Balloons in a Box(枚举)
- 3-2 Hadoop集群伪分布模式配置部署
- VUE-Windows系统下搭建vue环境
- 【原创】大数据基础之Zookeeper(1)介绍、安装及使用
- 下载chrome插件和离线安装CRX文件的方法
- Lecture 5
- App常见产品问题及预防方法