C++ 预编译头文件
http://www.cnblogs.com/nzbbody/p/3437868.html
1、解决什么问题?
C++ 编译器是单独,分别编译的,每个cpp文件,进行预编译(也就是对#include,define 等进行文本替换),生成编译单元。编译单元是一个自包含文件,C++编译器对编译单元进行编译。考虑,头文件A.h被多个cpp文件(比如A1.cpp,A2.cpp)包含,每个cpp文件都要进行单独编译,其中的A.h部分就会被多次重复第编译,影响效率。
2、怎么解决?
把A.h以及类似A.h这样的头文件,包含到stdafx.h中(当然也可以是其他文件),在stdafx.cpp中包含stdafx.h,设置stdafx.cpp文件的属性,预编译头设置为 创建。对于原先包含A.h的cpp文件,删除#include "A.h",改成包含stdafx.h,同时设置这些cpp文件(A1.cpp,A2.cpp)的属性,预编译头设置为 使用。这样的话,下次编译A1.cpp,A2.cpp的时候,对于A.h头文件中的那部分,就不需要编译了,节省时间。
3、预编译头文件原理
工程对预先编译的代码进行编译,会生成一个pch文件(precompiled header),包含了编译的结果。注意,可以对任何代码生成到pch中,但是生成pch是个很耗时的操作,因此,只对那些稳定的代码创建预编译头文件。
4、对于预编译头,分为:创建者,使用者,不使用者。
5、注意:现在的编译器都有Time Stramp 功能,当编译整个工程的时候,只编译那些修改的cpp文件。但是,这并没有解决上面提到的问题。考虑A1.cpp经常修改,每次修改,都要对包含的A.h头文件部分,进行编译。
6、Time Stramp:时间戳是指文件属性里的创建,修改,访问的时间。每次,文件内容修改,时间戳都会更新为最新的时间,时间戳发生变化,说明文件被修改了。
补充说明:时间戳往往应用在同步,比如音频视频不同步。举例来说,A,B两个人约定在一起,7点干什么,8点干什么,9点干什么,如果在7点没有同步,就算了,尽量保证8点同步。也就是说,同步是动态的过程,当不同步时,一个等待,一个追赶,保证下一个时间点同步。
相关文章
- 【C/C++学院】(21)Mysql数据库编程--开发简介/SQL语句
- 【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强
- c++中短路求值的妙用
- (C++)字符串分割
- C/C++基础讲解(六十五)之系统篇(定义文本模式)
- Open3D(C++) 最小二乘拟合平面
- Open3D(C++) 读取、可视化并保存mesh
- 成功解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
- 鱼和熊掌兼得:C++代码在编译时完成白盒测试
- 从四个问题透析Linux下C++编译&链接
- 【华为OD机试 2023最新 】 快速开租建站(C++ 100%)
- C++学习心得与c语言到c++衔接技巧
- 在C++语句中,两个标识符之间( )不能作为C++的分隔符。
- c++ vector 初始化_C++--vector()的用法
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- c++ 模板参数有默认值时模板特例化匹配问题
- C语言使用技巧(二十):万能模板【拿走不谢】:VS CODE配置C/C++编译环境
- Ubuntu20.04下,qt交叉编译报错::15: warning: identifier ‘nullptr‘ is a keyword in C++11 [-Wc++0x-compat]
- 嵌入式linux开发,C/C++交叉编译报错:xxx.mak:41: recipe for target ‘xxx.o‘ failed make: *** [xxx.o] Error 127
- 嵌入式linux开发,C/C++交叉编译报错:-bash: /.../bin/arm-none-linux-gnueabi-gcc: No such file or directory
- Ubuntu下进行C/C++开发编译时报错:make: command not found
- C++禁止隐式转换之explicit用法(八)
- key-value 多线程server的Linux C++实现
- ChatGPT——请生成rundll32.exe 可以运行的打开计算器程序的dll C++代码,并给出编译代码和运行方式
- C++11 完美转发
- 【C++ 科学计算】在Windows下编译安装Armadillo库(亲测有效)
- 第一章 C++编程基础——1.6指针
- ubuntu下实现make编译g++(C++)和gcc(标准C)程序调用
- C/C++,windows下编译报错:error C3861: “snprintf”: 找不到标识符