日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++ 使用预编译头

發布時間:2025/3/21 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++ 使用预编译头 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、使用默認的預編譯頭
?????? 要使用預編譯頭,我們必須指定一個頭文件,這個頭文件包含我們不會經常改變的代碼和其他的頭文件,然后我們用這個頭文件來生成一個預編譯頭文件(.pch文件),想必大家都知道 StdAfx.h這個文件。很多人都認為這是VC提供的一個“系統級別”的,編譯器帶的一個頭文件。其實不是的,這個文件可以是任何名字的。我們來考察一個典型的由AppWizard生成的MFC Dialog Based 程序的預編譯頭文件。(因為AppWizard會為我們指定好如何使用預編譯頭文件,默認的是StdAfx.h,這是VC起的名字)。我們會發現這個頭文件里包含了以下的頭文件:

[cpp]?view plain?copy

?

  • #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”。原因是理所當然的,我們僅僅是要它能夠編譯而已。也就是說,要的只是它的.cpp的擴展名。我們可以用/Yc編譯開關來指定StdAfx.cpp來生成一個.pch文件,通過/Fp編譯開關來指定生成的pch文件的名字。右鍵StdAfx.cpp——》屬性——》C/C++——》預編譯頭,如下所示。

    ?

    ??????? 然后可以通過/Yu編譯開關來使用預編譯頭,右鍵解決方案——》屬性——》C/C++——》預編譯頭,如下圖所示。

    二、創建并使用自己的預編譯頭

    ??????????在VS中設置預編譯頭從而提高編譯速度,其實這種方法在之前工作的時候也碰到過,今天寫程序時發現每次修改后再編譯的速度很慢,讓人崩潰!于是采用設置預編譯頭的方法,結果編譯速度大幅提高!本文通過我這次的程序實例講解這種方法。
    ??????? 先看下VS中工程的文件結構。

    ??????? 其中common.h文件中內容為:

    ?

    [cpp]?view plain?copy

    ?

  • #define?_COMMON_H_????
  • ????
  • #include?<pcl/ModelCoefficients.h>????
  • #include?<pcl/point_types.h>????
  • #include?<pcl/io/pcd_io.h>????
  • #include?<pcl/filters/extract_indices.h>????
  • #include?<pcl/filters/voxel_grid.h>????
  • #include?<pcl/filters/radius_outlier_removal.h>????
  • #include?<pcl/features/normal_3d.h>????
  • #include?<pcl/kdtree/kdtree.h>????
  • #include?<pcl/sample_consensus/method_types.h>????
  • #include?<pcl/sample_consensus/model_types.h>????
  • #include?<pcl/segmentation/sac_segmentation.h>????
  • #include?<pcl/segmentation/extract_clusters.h>????
  • #include?<pcl/visualization/pcl_visualizer.h>????
  • #include?<iostream>????
  • #include?<pcl/io/io.h>????
  • #include?<pcl/io/pcd_io.h>????
  • ????
  • using?namespace?pcl;????
  • #endif????//?_COMMON_H_???
  • ?

    ??????? common.h文件中主要是包含一些PCL工程的頭文件,這些頭文件是很大的,common.h文件很少需要修改且被眾多的源文件include。這三個條件很重要,因為本文介紹的方法的有效性就是基于這三個條件。在工程segment_plane中,每個.cpp和.h文件都包含common.h文件。倘若不設置預編譯頭的話,編譯很慢,每次修改后在編譯也很慢。原因后面解釋,下面介紹其設置方法:

    ?

    • ??????? 在工程配置屬性中設置“使用預編譯頭文件”

    • ??????? 設置“創建預編譯頭文件”

    ??????? 在【解決方案資源管理器】中右鍵precompile.cpp文件,在屬性頁中設置創建預編譯頭文件

    ??????? 你可能覺得這個文件命名方式有點奇怪,其實這個文件沒什么實際內容,僅僅是創建預編譯頭文件用的,這個文件幾乎不會被改動!precompile.cpp的文件內容如下:

    ?

    [cpp]?view plain?copy

    ?

  • #include?"common.h"????
  • #include?"typesdef.h"??
  • ??????? 通過以上兩部設置之后,編譯就變得非常快了。這是為什么呢?

    ?

    ?????? 我們知道在編譯之前有個編譯預處理過程,這個過程中會將所有的頭文件的內容復制到源文件中,普通的頭文件復制也沒什么,但是正如之前所說,這些頭文件內容很多,那么復制頭文件內容所花時間就很大了。而采用設置預編譯頭的方法編譯時間就會大幅縮小,這是因為編譯器會先編譯precompile.cpp,生成一個precompile.pch文件,之后編譯其他.cpp文件就會直接使用precompile.pch中的內容,這樣就避免了大量的復制,從而大幅縮短編譯時間。

    ??????? 注意設置預編譯頭后,編譯時可能會出現:

    [cpp]?view plain?copy

    ?

  • error?C3859:?超過了PCH的虛擬內存范圍;請使用“-Zm33”或更大的命令行選項重新編譯??
  • ??????? 這是因為頭文件過多,內容過大造成的,解決方案可以參考:http://blog.csdn.net/caoshangpa/article/details/75208197

    ?

    ?

    參考鏈接:http://blog.csdn.net/ly416/article/details/24735441

    ?

    http://blog.csdn.net/caoshangpa/article/details/75207977

    總結

    以上是生活随笔為你收集整理的VC++ 使用预编译头的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。