新版的VS2017在新建了一个项目之后,会自动生成如下代码
// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
这段代码中包含了一个名为pch.h的头文件,这个头文件我们用旧版的VS或者VC++6.0时根本没有见过,而且把这段代码复制到VC上运行,程序还会报错,因为VC找不到pch.h这个头文件。
如果在VS2017中删除#include"pch.h",程序会出现如下错误:
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h””?
pch是一个在你创建项目时编译器自动生成的文件,称为预编译文件。打开pch.h,和pch.cpp,发现里面根本没有实质性的东西。
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
#ifndef PCH_H
#define PCH_H
// TODO: 添加要在此处预编译的标头
#endif //PCH_H
// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的
#include "pch.h"
// 一般情况下,忽略此文件,但如果你使用的是预编译标头,请保留它。
其实这两个文件一般情况下我们是用不到的,但是当我们编写的代码中需要预处理的东西比较多时,可以把这些代码放在pch文件里。
比如说,某个程序有大量的宏定义,当然,我们在编写代码时,对常量进行宏定义是一种非常好的习惯,它有利于我们后期对代码进行维护和修改。我们可以把宏定义都放在pch.h文件里,对100进行宏定义,定义名为MAX,代码如下所示。
#ifndef PCH_H
#define PCH_H
#define MAX 100
// TODO: 添加要在此处预编译的标头
#endif //PCH_H
这时在main函数所在的.cpp文件中添加#include"pch.h",就可以使用宏定义的符号MAX了。
#include "pch.h"
#include <iostream>
int main()
{
int i = 0;
for (i = 0; i < MAX; i++) {
printf("%d\n", i);
}
}
下面再给大家举个应用pch.h的例子。当你有一个函数,你经常需要调用它,但是这个函数的功能一般不需要修改和维护,这时可以把这个函数写到pch.cpp里,并在pch.h中给出函数的声明。
//pch.h中对add函数进行声明
#ifndef PCH_H
#define PCH_H
int add(int a, int b);
//pch.cpp中写出add函数的函数体
#include "pch.h"
int add(int a, int b) {
return a + b;
}
#include "pch.h" //包含此头文件,就可以调用add函数了
#include <iostream>
int main()
{
int sum;
sum = add(3, 4);
printf("%d", sum);
}
进行某些代码或者宏定义的预处理是可以提高程序的执行效率的,但对于编写的比较小的程序来说,这点效率的提高可能根本感觉不出来,因此直接忽略#include"pch.h"就行了,放在那儿,不去管它,其余的代码该怎么写就怎么写。
但如果我们非得想把这一行代码删除,可以参考如下步骤:
1.项目->项目属性
2.在属性页,依次找到配置属性——>C/C++ ——>预编译头,如图所示
3.确定保存之后,在原先的代码中把#include"pch.h"删除就可以了。
当然,我们看到add函数也无法使用了。