预编译头文件:关于“stdafx.h”无法打开或者意外结尾的错误

预编译头文件:关于“stdafx.h”无法打开或者意外结尾的错误

从同事那拷贝hcpp文件过来的时候遇到了“关于“stdafx.h”无法打开或者意外结尾的错误

查到解决方法是:

可以在工程setting 中,选择c/c++选项,category下来菜单选择Precompiled Headers,选择Not Using Precompiled headers

因为我拷贝过来的时候,cppPrecompiled Headers,的值是使用预编译头文件.因为我是初学者,所以一开始对预编译头文件什么的不清楚,以test.htest.cpp为例,我是把#include "stdafx.h"写在test.h文件中的,test.cpp中没有写,所以用这种方法可以解决。

 

但是我又仔细一想,如果用这种方法解决的话,那么这个test.cpp就不使用预编译头文件,那么必定在test.h展开在test.cpp文件中时编译的话会把这个stdafx.h当作一个普通的头文件,必定会去编译stdafx.h里面包含的所有文件。这完全违背了我们使用预编译头文件来加快编译速度的初衷了。

 

但是为什么我这样写test.htest.cpp会报这个错误呢(关于“stdafx.h”无法打开或者意外结尾的错误), 原来因为该cppPrecompiled 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

 

 

 

 

 

posted @ 2013-05-03 14:38  蹦极的馒头  阅读(3221)  评论(0编辑  收藏  举报