-
预编译头文件:关于“stdafx.h”无法打开或者不测结尾的错误
添加时间:2013-5-3 点击量:预编译头文件:关于“stdafx.h”无法打开或者不测结尾的错误
从同事那拷贝h和cpp文件过来的时辰碰到了“关于“stdafx.h”无法打开或者不测结尾的错误”
查到解决办法是:
可以在setting 中,选择c/c++选项,category下来菜单选择Precompiled Headers,选择Not Using Precompiled headers。
因为我拷贝过来的时辰,该cpp的Precompiled Headers,的值是应用预编译头文件.因为我是初学者,所以一开端对预编译头文件什么的不清楚,以test.h和test.cpp为例,我是把#include stdafx.h写在test.h文件中的,test.cpp中没有写,所以用这种办法可以解决。
然则我又细心一想,若是用这种办法解决的话,那么这个test.cpp就不应用预编译头文件,那么必然在test.h展开在test.cpp文件中时编译的话会把这个stdafx.h算作一个通俗的头文件,必然会去编译stdafx.h里面包含的所有文件。这完全违背了我们应用预编译头文件来加快编译速度的初志了。
然则为什么我如许写test.h和test.cpp会报这个错误呢(关于“stdafx.h”无法打开或者不测结尾的错误), 本来因为该cpp的Precompiled Headers,的值是应用预编译头文件(即把stdafx.h算作预编译头文件),然则我的test.cpp中又没写#include stdafx.h,于是编译该cpp时会找不到这个预编译头文件,然则我想我的test.h中写了#include stdafx.h啊,理论来说,h展开到cpp后,cpp相当于有了#include stdafx.h,怎么还会失足呢?后来发明在编译任何一个cpp文件的时辰,起首会按照你的编译头文件选项去断定,若是你选择的是应用预编译头文件,则就会去找到cpp中的#include stdafx.h这一行,找这一行是为了直接跳到下一行持续编译,(这就是为什么要把#include stdafx.h放在cpp文件的第一行,你放第二行,那么第一行的会直接跳过)持续编译的过程发明#include test.h,再展开。再持续编译。。若是发明没找到#include stdafx.h就报错,若是你选择的是不应用预编译头文件,那么编译时就遵守正常的编译次序来,从上到下,碰到#include test.h,展开,展开后有#include stdafx.h,把stdafx.h这里面的包含的所有文件都编译。然后持续。。
下面给出的摘自网上下面给出一个应用预编译头文件的操纵步调, 享受一下预编译头文件给我们带来的编译速度的提拔:
1) 添加一个stdafx.h文件(名字随便取, 这里用了VS默认供给的名称), 在这个.h文件里include要应用的头文件(一般是外部的库, 本身写的不常变的头文件也可以加进来)
2) 添加一个stdafx.cpp文件, 并include stdafx.h
3)项目属性-->c/c++-->Precompiled设置为Use Precompiled Header, stdafx.h
4)stdafx.cpp属性-->c/c++->Precompiled设置为Create Precompiled Header, stdafx.h