zoukankan      html  css  js  c++  java
  • C++ 预编译头文件

    使用C++提供的预编译头文件支持,如果应用程序是很大的头文件,使用预编译头文件可以大大降低应用程序的编译时间。但预编译头文件是如何产生的,什么情况下需要预编译头文件,如何创建预编译头文件,预编译头文件在编译器中编译后会产生什么,使用预编译头文件需要注意什么,接下来针对于这些问题一一讲解。

    (1)       预编译头文件产生原因

    编译器在编译程序时所做的事情主要分为预编译,编译,汇编,和链接。而针对于预编译过程主要针对的是源文件中含有的“#”的指令,比如#include,#define进行展开,详细的说就是:

    1. 把所有的“#define”删除,并且展开所有的宏定义
    2. 处理所有的条件预编译指令,比如 “#if”“#ifndef”“#else”“#endif”
    3. 处理“#include” 将被包含的文件递归插入到预编译指令的位置,之所以递归是由于被包含的文件可能还包含其它文件
    4. 删除所有的注释,比如“//”“/**/”

    这样就会存在一个问题就是,如果头文件相当的庞大,比如window.h甚至MFC库中所包含的各种头文件,如果将如此庞大的一个工程文件进行一一展开的话,编译的速度可想而知。

    然而,时代的进步,人们发现,在某个工程中,总会有那些一些头文件几乎是所有的cpp所必须包含的,这样将这些头文件提取出来,然后编译,可以提高编译的速度。所以预编译就这样产生了。

    (2)       创建预编译头文件

    最为简单的例子,以vs2008为例,打开项目,File -> New -> Project,建立一个win32 console application ,直接下一步,成功后,编译其会默认产生一个stdafx.h和Stdafx.cpp。产生.cpp文件的原因仅仅是让它可以编译而已,头文件是不可以被编译的。所以stdafx.cpp中一般仅包含一个其头文件,

    如果编译成功的话,在相对应的目录下会生成一个stdafx.pch的预编译头文件(.pch)。如果说,在编译程序的过程出现这样的问题:

    fatal error C1083: Cannot open precompiled header file: 'Debug×××.pch': No such file or directory

    表示.pch文件未创建成功,可右击工程打开属性修改:

    C/C++ -> 预编译头->创建/使用预编译头:创建预编译头(/Yc) 即可。

    如果文件过小,我不想使用预编译头文件,或者出现这样的问题:

    error C2857: 在源文件中没有找到用/Ycstdafx.h 命令行选项指定的#include语句

    可将其该.cpp文件属性修改为“不使用预编译头”即可,或将其stdafx.h添加到相应的.cpp文件中即可。

    (3)       注意事项

    1. 倘若工程较大,使用预编译头文件较好,加快编译速度。工程比较小,不推荐使用。但是创建预编译头文件后,第一次编译所花费的时间比后面的编译要稍微长些。
    2. 倘若.pch文件不小心丢失,只需要让编译器重新编译生成一个新的即可。
    3. 要确保放置在预编译头文件中的文件在工程开发时,不会被经常改变,否则的话,得不偿失。
  • 相关阅读:
    mysql数据库常用指令
    解决windows的mysql无法启动 服务没有报告任何错误的经验。
    “Can't open file for writing”或“operation not permitted”的解决办法
    启动Apache出现错误Port 80 in use by "Unable to open process" with PID 4!
    如何打开windows的服务services.msc
    常见的HTTP状态码 404 500 301 200
    linux系统常用的重启、关机指令
    (wifi)wifi移植之命令行调试driver和supplicant
    linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
    alloc_chrdev_region申请一个动态主设备号,并申请一系列次设备号
  • 原文地址:https://www.cnblogs.com/SkyflyBird/p/4536759.html
Copyright © 2011-2022 走看看