Előrefordított fejlécek ( eng . pre-compiled headers ) - C és C nyelvű programozási környezetekben ++ - egy mód a programok fordításának felgyorsítására a modul interfészeket tartalmazó ún. programozási nyelvek, úgy kapcsolódnak a programhoz, hogy szövegüket egy speciális előfeldolgozó direktíva segítségével közvetlenül beillesztik a fő program törzsébe . Az előre lefordított fejléceket a program a fordító belső formátumában fájlként menti lemezre, és a projekt újrafordításával jelentősen lecsökken a feldolgozásuk és a csatlakoztatásuk ideje. #include
A C programozási nyelv fejlécfájlokat használt egy külső modul csatlakoztatásához . Ez leegyszerűsíti a fordítót, és némi rugalmasságot biztosít – és 20 évig működött, amíg a fejlécek kicsik voltak, és a projektben kevés fájl volt. A szoftverprojektek bővülésével a fordítási idő négyzetesen növekedni kezdett [1] – mind a fordítási egységek száma, mind az egyes egységekhez kapcsolódó fejlécek száma nő. Különösen nagy projekteknél a teljes újrafordítás több tíz percet vesz igénybe, és gyakrabban hajtják végre éjszakai építés során, mint a programozók munkahelyén.
Ezenkívül a C programozási nyelv az LR(1) családba tartozik , ezért a C fordítók lassabbak, például a Pascal (ami LL(1) ) .
A fordítási idő csökkentése érdekében előre lefordított fejléceket fejlesztettek ki. Mivel a fejlécfájlok sokkal ritkábban változnak, mint a programkódot tartalmazó fájlok (a könyvtárfájlok pedig szinte soha), ésszerű optimalizálási eszköznek bizonyult a fejlécek előfeldolgozása és speciális típusú fájlokká való konvertálása, amelyeket a fordítás során felhasználhatunk. programot, megkerülve az összeállítás első szakaszait. A fejlécek előfordítása miatt a fordító csak a program megváltozott részeit dolgozza fel teljesen. A fejléc előfordítása azonban nem mindig segít:
Ezért általában mindenféle könyvtári fejléc, nagy és ugyanakkor ritkán változó, benne van az előre lefordított készletben.
Minden, ami az irányelv elé kerül, előre le van fordítva #pragma hdrstop.
// main.cpp ///// Előre lefordított fejlécek // C++ # include <cstdio> // STL # include <karakterlánc> # tartalmazza a <vektort> # tartalmazza a <térképet> # include <algoritmus> // OS-specifikus # include <windows.h> ///// Az előfordítás itt ér véget # pragma hdrstop ///// Az egyéb fejlécek # közé tartozik az "egység1.h" int main () { doUnit1 (); return 0 ; }A h-files fordításakor a GCC automatikusan feltételezi, hogy egy előre lefordított fejléc szükséges (vagy a parancssoron keresztül adható meg, switch -x). A legtöbb programhéj (mint például a Code::Blocks ) lehetővé teszi annak megadását, hogy mely fájlokat kell előre lefordítani. A standard megoldás az, hogy a leggyakrabban használt, de ritkán változó fejléceket "kiíratja" egy hfájlba, és legelsőként tartalmazza.
// pch.h - előre lefordítani (a makefile-ben vagy projektben beállítva). // C++ # include <cstdio> # include <cmath> // STL # include <karakterlánc> # tartalmazza a <vektort> # tartalmazza a <térképet> # include <algoritmus> // OS-specifikus # include <windows.h> // unit1.cpp // először előre lefordítva! # tartalmazza a "pch.h" // egyéb fejlécek # tartalmazzák az "egység1.h" érvénytelen doUnit1 () { } // main.cpp // először előre lefordítva! # tartalmazza a "pch.h" // egyéb fejlécek # tartalmazzák az "egység1.h" int main () { doUnit1 (); return 0 ; }A helyzet hasonló a GCC-hez. A Visual C++ 6.0-s és újabb verziói a fejlécet a szabványos névvel állítják elő - stdafx.h(ez a név fordító opcióval módosítható).
Az IDE új projekt varázslója lehetővé teszi, hogy eldöntse, használjon-e előre lefordított fejlécet. Használatuk automatikusan hozzáadja a fordító opciót /Yu'stdafx.h', és a nem tartalmazó fájl fordítása hibával meghiúsul. #include "stdafx.h"