¿Por qué utilizar encabezados precompilados?


La lectura de las respuestas, creo que lo he estado haciendo con ellos es una especie de estúpido:

#pragma once
//Defines used for production versions
#ifndef PRODUCTION
#define eMsg(x) (x) //Show error messages
#define eAsciiMsg(x) (x)
#else
#define eMsg(x) (L"") //Don't show error messages
#define eAsciiMsg(x) ("")
#endif //PRODUCTION
#include "targetver.h"
#include "version.h"
//Enable "unsafe", but much faster string functions
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS
//Standard includes
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <direct.h>
#include <cstring>
#ifdef _DEBUG
#include <cstdlib>
#endif
//Standard Template Library
#include <bitset>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
#include <string>
#include <numeric>
//Boost libraries
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/scoped_array.hpp>
//Windows includes
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "FILETIME_Comparisons.h"
#include <shlwapi.h>
#include <Shellapi.h>
#include <psapi.h>
#include <imagehlp.h>
#include <mscat.h>
#include <Softpub.h>
#include <sfc.h>
#pragma comment(lib, "wintrust.lib")
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"Psapi.lib")
#pragma comment(lib,"shlwapi.lib")
#pragma comment(lib,"imagehlp.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"Shell32.lib")
#pragma comment(lib,"Sfc.lib")
#pragma comment(lib,"Version.lib")
//Crypto ++ libraries
#ifdef _DEBUG
#pragma comment(lib,"cryptlibd.lib")
#else
#pragma comment(lib,"cryptlib.lib")
#endif
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <md5.h>
#include <sha.h>
//String libraries
#include "stringUnicodeConversions.h"
#include "expandEnvStrings.h"
#include "randomString.h"
#include "getShortPathName.h"
//Regular Expression Libraries
#include "fpattern.h"
//File Result Record
#include "unixTimeToFileTime.h"
#include "fileData.h"
//Writer
#include "writeFileData.h"
//Criteria Structure System
#include "priorities.h"
#include "criterion.H"
#include "OPSTRUCT.H"
#include "regexClass.H"
#include "FILTER.h"
//Sub Programs Root Class
#include "subProgramClass.h"
//Global data
#include "globalOptions.h"
//Logger
#include "logger.h"
//Console parser
#include "consoleParser.h"
//Timeout handler
#include "timeoutThread.h"
//Zip library
#include "zip.h"
#include "unzip.h"
#include "zipIt.h"
//Scanner
#include "mainScanner.h"
#include "filesScanner.h"
//Sub Programs
#include "volumeEnumerate.h"
#include "clsidCompressor.h"
#include "times.h"
#include "exec.h"
#include "uZip.h"
//64 bit support
#include "disable64.h"
  • Una nota importante en Visual Studio: asegúrese de que el primer #a incluir en cada cabecera #include «stdafx.h» o sus archivos no se analiza! Estúpido, lo sé. Pero es un error fácil de hacer.
  • Para ser más específicos, cualquier cosa por ENCIMA de #include «stdafx.h» no se analiza. Consulte en.wikipedia.org/wiki/Precompiled_header
InformationsquelleAutor Billy ONeal | 2009-05-24

5 Comentarios

  1. 40

    Compila un mucho más rápido. La compilación de C++ lleva años sin ellos. Intente comparar el tiempo en un gran proyecto!

  2. 55

    En C/C++ #include mecanismo es una copia textual del archivo especificado en el archivo actual. Los encabezados de incluir otras cabeceras (que incluyen pero otras cabeceras), por lo que al hacer un #include, podría ser la adición de decenas de miles de líneas de C++ en cada archivo cpp (o cxx, c, lo que sea), todos los cuales necesitan ser compilados cada momento. Esto puede ser un sever cuello de botella para los proyectos grandes.

    Encabezados precompilados acelerar este proceso mediante la compilación de cada encabezado de una vez, a continuación, incluidos los que compila estado en el cpp se incluyen en.

    • Yo estaba buscando en una visión de lo que en realidad un archivo de encabezado precompilado es causa como sabemos los archivos de cabecera no están a la unidad de traducción por sí mismos. Bonita explicación, thx.
    • Bonito breve explicación. Este debe ser marcado como respuesta.
    • ¿Cuál es la meanig de «compilar cada encabezado de una vez»? Son los encabezados compilado? No son sólo las declaraciones … ¿no?
  3. 10

    Re: su uso actual, si usted tiene un destino con un gran número de archivos, puede ser aún más rápido para usar PCH de esa manera – intenta cambiar a averiguar. Depende: si usted tiene un montón de encabezados de su propia, y cambian con poca frecuencia, y usted tiene un gran número de archivos de código fuente que cambia con mucha más frecuencia, entonces su uso PCH reducirá los tiempos de reconstrucción.

    Normal, pero el consejo es sólo poner las cosas en PCH que nunca cambian, ya que existe una sobrecarga para la producción de la PCH de la misma. Si usted gatillo que con cada reconstruir (por constantemente ajustando uno de los encabezados), el uso de PCH puede hacer la reconstrucción más lento.

    • Los archivos de cambiar bastante de cada generación 😛
  4. 7

    Así que usted no tiene que compilar cada vez que la construcción de su proyecto. Se utilizan para el sistema de cabeceras que no se va a cambiar.

    • Para (lea la edición anterior), lo que está diciendo es que he estado bastante estúpido…..
  5. 7

    Acelera de compilación.

    Cuando estás incluyendo las cabeceras de otros proyectos, no hay que esperar a cambio de ellos. Si pones estos en un archivo de encabezado precompilado, luego de que el código no tiene que volver a compilar cuando se realizan cambios en el código fuente. Esto reduce repetitivo compilación de sin cambios de código, acelerando el tiempo de compilación.

Dejar respuesta

Please enter your comment!
Please enter your name here