使用预编译头
⑴ unexpected end of file while looking for precompiled header directive 什么意思
在该cpp文件的最顶处插入
#include "stdafx.h"
这个是微软的硬性规定,当初就是这么设计的,使用预编译技术,必须要将那些预编译的头文件放置在每个cpp文件的最顶处,而预编译的头文件声明是放在stdafx.h文件中的。
stdafx.h中的的声明是项目中每个cpp文件都需要包含的,而且要一致。
如下:
1. 正确
#include "stdafx.h"
#include <stdio.h>
int main(){...}
...
2.正确
#include "stdafx.h"
...
3.错误
#include <stdio.h>
#include "stdafx.h"
int main(){...}
4.错误(楼主应该是这种写法导致的错误)
#include <stdio.h>
int main(){...}
上述情况都是在你讲选项中的使用预编译头文件勾选上的时候。。。。没有使用预编译头文件则没有这些要求。
⑵ 关于使用预编头和创建预编译头有什么区别
在vs2013下测试了一下,选中与否生成的项目结构是一样的。如果不选中预编译头,只保留mycpp1.cpp并作出相应修改,构建是可以通过的。如果是勾选了预编译头,只保留mycpp1.cpp是不可以编译通过的。正如最快回答中所说的,不选中,stdafx.h只是个普通的头文件,产生的文件结构一样只是采用了同一个模板而已。如果你仔细查看过工程的属性里有个选项就是预编译头,创建项目的时候预编译头的勾选与否,对应的就是这里这个选项,对应到编译阶段就是是否查找stdafx.h并且将它视为预编译头。
⑶ visual studio 2019怎么在新建工程的时候自动添加预编译头文件
看上去应该是可以的,你把鼠标移到红线上面看看是啥错误
我觉得有可能是String.h,String类在内库中已经有了,要么就是用法不规范什么的
⑷ VC中".pch"是什么文件,没有.pch文件怎么办(ZZ)
.pch文件是 用来预编译头文件用的,如果生成.pch文件,上次编译的部分头文件,下次就不用重新再编译了。
所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件。
编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。
预编译头的作用:
根据上文介绍,预编译头文件的作用当然就是提高便宜速度了,没有必要每次 都编译那些不需要经常改变的代码。编译性能当然就提高了。
预编译头的使用:
要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的代码和其他的头文件,然后用这个头文件来生成一个预编译头文件(.pch文件)StdAfx.h这个文件。这是VC提供的一个“系统级别”的,编译器带的一个头文件。其实不是的,这个文件可以是任何名字的。 典型的由AppWizard生成的MFC Dialog Based程序的预编译头文件。(因为AppWizard 会指定好如何使用预编译头文件,默认的是StdAfx.h,这是VC起的名字)。发现这个头文件里包含了以下的头文件:
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4
Common Controls
#include <afxcmn.h>
这些正是使用MFC的必须包含的头文件
一个头文件是不能编译的。所以还需要一个cpp文件来生成.pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件里只有一句代码就是:#include “Stdafx.h”。原因是理所当然的,仅仅是要它能够编译而已?D?D?D也就是说,要的只是它的.cpp的扩展名。可以用/Yc编译开关来指
定StdAfx.cpp来生成一个.pch文件,通过/Fp编译开关来指定生成的pch文件的名字。打 开project ->Setting->C/C++ 对话框。把Category指向Precompiled Header。在左边的树形视图里选择整个工程Project Options(右下角的那个白的地方)可以看到 /Fp “debug/PCH.pch”,这就是指 定生成的.pch文件的名字,默认的通常是<工程名>.pch(示例工程名就是PCH)。 然后,在左边的树形视图里选择StdAfx.cpp.//这时只能选一个cpp文件! 这时原来的Project Option变成了 Source File Option(原来是工程,现在是一个文件,当然变了)。在这里可以看到 /Yc开关,/Yc的作用就是指定这个文件来创建一个 Pch文件。/Yc后面的文件名是那个包含了稳定代码的头文件,一个工程里只能有一个文件的可以有YC开关。VC就根据这个选项把 StdAfx.cpp编译成一个Obj文件和一个PCH文件。
然后再选择一个其它的文件来看看,//其他cpp文件
在这里,Precomplier 选择了 Use ???一项,头文件是指定创建PCH 文件的stda fx.h 文件。事实上,这里是使用工程里的设置,(如图1)/Yu”stdafx.h”。这样,就设置好了预编译头文件。就可以使用预编译头功能了。
⑸ 使用预编译的头文件和CMake问题,怎么解决
应该是你的板子是用/opt/arm-2010.09.../include/bits编译
pc机是用/usr/include/bits编译,在arm上编译的时候前者的头文件内容要和后者一直
另外,没有指定目录的情况下cmake是不会去搜寻/opt/目录下的文件夹,看下是哪里写错了!
⑹ 代码中两个预编译头的作用是什么
#define WIN32
#define HAVE_REMOTE
你是说这两个是吧?这个一般用于代码的移植,比如一个工程想在window和linux下均能运行,但window和linux系统中有些定义、系统调用都不同,就需要上面的那种定义了。比如
#ifdef WIN32
WIN_printf("xxxxx\r\n");
#elif define LINUX
LINUX_printf("xxxxx");
#endif
用了上面的条件编译,那么这个代码就从window上面移植到linux上只需要把#define WIN32去掉,再加上#define LINUX就行了
⑺ C++中总是出错 #include "stdafx.h"
首先,是没有stdafx.h这个头文件,可以下载一个,放到安装安装目录下的vc++6.0\vc98\mfc\include,你可以先在里边查找有没有这个头文件。
还有int
main(int
argc,char
argv[]
)和void
main
()不一样,返回值类型不一样,一个是int型,一个无参数返回,int
argc,char
argv[]指主函数有参数传递进来,而括号为空表示没有。返回值和参数好比函数y=f(x),y为返回值,x为参数,f就为函数名,这里,int表示y的类型,main代替f,x也就是整型argc和指针argv了。
⑻ 怎么在visual c++里面写c语言·难道只改改后缀就行了这样是不是不能用预编译头预编译头用来干啥
确实只需要改后缀就可以了
预编译都支持的
lib分两种:系统自带的,或者第三方的
自带的不需要复制,设置好就行
第三方的可以复制到工程,也可以设置(指定路径)
lib文件复制过去,或者在设置里面设置,或者用#pragma comment(lib,"**.lib")都可以
⑼ visual studio 预编译头有什么用
编译器预编译一些不容易变动的头文件,提高整个项目的生成速度。 对于大项目使用预编译头可以大大减少编译时间。