2011-02-10 14 views
7

Czym dokładnie są nagłówki prekompilowane? kiedy są używane?Prekompilowane nagłówki

+2

możliwy duplikat [prekompilowanych nagłówków] (http://stackoverflow.com/questions/1293538/precompiled-headers). Zobacz także: [Dlaczego warto używać prekompilowanych nagłówków (C/C++)?] (Http://stackoverflow.com/questions/903228/why-use-precompiled-headers-c-c) –

Odpowiedz

7

Wstępnie skompilowane nagłówki to optymalizacja używana podczas kompilacji.

Zasadniczo, jeśli skompilujesz coś takiego jak stdio.h z dokładnie tymi samymi definicjami i środowiskiem, możesz spokojnie założyć, że wynik będzie taki sam za każdym razem.

Kompilator zapamiętuje "skompilowaną" wersję tego nagłówka, więc nie musi tego robić ponownie.

W rzeczywistości wydaje się być początkowa grupa nagłówków, które czyni różnicę więc, jeśli każdy z plikami źródłowymi rozpoczyna się:

#define XYZZY 42 
#include <stdio.h> 
#include <stdlib.h> 

pierwszy zestawia zupełnie ale pamięta stan bezpośrednio po tę trzecią linię. Następny może po prostu całkowicie odrzucić te trzy linie i załadować zapisany stan przed kontynuowaniem kompilowania reszty pliku.

Gdy po raz pierwszy ujrzałem tę funkcję był na Windows z masywnejwindows.h pliku nagłówka, a wierz mi, że popełnił wiele zmian do ogólnych czasów kompilacji.