De ce antete precompilate
Antetele precompilate sunt proiectate pentru a accelera asamblarea proiectelor. De obicei, programatorii încep să se familiarizeze cu Visual C ++ folosind proiecte mici. Pe ele este dificil de observat câștigul din anteturile precompilate. Ce este cu ei, că fără ei, programul compilează în același timp. Acest lucru adaugă confuzie. O persoană nu vede avantajele acestui mecanism și decide că are sarcini specifice și că nu va avea nevoie de el niciodată. Și uneori gândește așa de mulți ani.
De fapt, anteturile precompilate reprezintă o tehnologie foarte utilă. Beneficiul de la el poate fi văzut, chiar dacă proiectul doar câteva zeci de dosare. Mai ales câștigul devine vizibil dacă folosiți biblioteci atât de grele ca amplificarea.
Dacă vă uitați la fișierele * .cpp din proiect, puteți vedea că multe includ aceleași seturi de fișiere antet. De exemplu, vector, string, algoritm. La rândul lor, aceste fișiere includ alte fișiere antet și așa mai departe.
Puteți reduce semnificativ cantitatea de muncă pe care trebuie să o efectueze preprocesorul atunci când compilați proiectul. Ideea este să preprocesați un grup de fișiere în avans și apoi să înlocuiți fragmentul de text finit.
De fapt, sunt luate o serie de măsuri. Puteți să stocați nu doar text, ci și mai multe informații prelucrate. Nu știu exact cum funcționează în Visual C ++. Dar, de exemplu, puteți stoca text deja rupt în token-uri. Aceasta va accelera procesul de compilare.
Cum funcționează antetele precompilate
Un fișier care conține antete precompilate are extensia ".pch". Numele fișierului este de obicei același cu numele proiectului. Firește, acest nume și alte nume pot fi modificate în setări. Fișierul poate fi destul de mare și depinde de câte fișiere antet sunt deschise în el. De exemplu, în proiectul PVS-Studio este nevoie de aproximativ 3 megaocteți.
Fișierul * .pch apare după compilarea stdafx.cpp. Fișierul este colectat cu tasta "/ Yc". Această cheie doar spune compilatorului că trebuie să creați antete precompilate. Fișierul stdafx.cpp poate conține o singură linie: # include "stdafx.h".
Cel mai interesant este în fișierul "stdafx.h". Acestea includ fișierele antet, care vor fi preprocesate în prealabil. Ca exemplu, aici este fișierul stdafx.h, pe care îl folosim în PVS-Studio (fișierul este scurtat pentru articol):
Sunt necesare directivele "#pragma warning" pentru a scăpa de avertismentele emise bibliotecilor standard.
Acum toate fișierele * .c / * .Cpp ar trebui să includă "stdafx.h". În același timp, ar trebui să eliminați anteturile din aceste fișiere, care sunt deja incluse cu ajutorul "stdafx.h".
Cum se utilizează antetele precompilate
Când creați un nou proiect, Expertul din Visual Studio creează două fișiere: stdafx.h și stdafx.cpp. Prin intermediul acestora este implementat mecanismul anteturilor precompilate.
De fapt, aceste fișiere pot fi numite orice. Lucrul important nu este numele, ci parametrii de compilare din setările proiectului.
În fișierul * .c / * .Cpp, puteți utiliza doar un antet precompilat. Cu toate acestea, într-un proiect pot exista mai multe antete precompilate diferite. În timp ce vom presupune că are doar unul.
Deci, dacă ați folosit vrăjitorul, atunci aveți deja fișierele stdafx.h și stdafx.cpp. Plus toate cheile de compilare necesare sunt expuse.
Imaginați-vă situația dacă am putea include un alt fișier la "stdafx.h". În acest fișier, luați și scrieți: #define char char. Există ambiguități. Modificăm conținutul tuturor fișierelor care menționează "bool". Acum este atât de imposibil de luat și de textul preprocesat. Întregul mecanism al "antetelor precompilate" se descompune. Cred că acesta este unul dintre motivele pentru care "stdafx.h" ar trebui să fie localizat la început. Poate că există și alții.
Ce să includem în stdafx.h
Acesta este un punct foarte important. Închiderea includerii în "stdafx.h" într-un rând nu numai că va accelera compilația, dar va încetini și ea.
Toate fișierele, inclusiv "stdafx.h" depind de conținutul său. Să presupunem că fișierul "X.h" este inclus în "stdafx.h". Dacă schimbați ceva în X.h, aceasta poate duce la o recompilare completă a întregului proiect.
Regula. Includeți în "stdafx.h" numai acele fișiere care nu se schimbă sau nu modifică FOARTE RĂSPUNSURI. Candidații buni sunt fișierele de antet ale sistemului și ale bibliotecilor terțe.
Dacă includeți în "stdafx.h" propriile fișiere din proiect, respectați vigilența dublă. Includeți numai acele fișiere care se modifică foarte, foarte rar.
Dacă un fișier * .h se modifică o dată pe lună, este prea des. De regulă, este rareori posibil să faceți din prima editare toate fișierele din fișierul h. De obicei este nevoie de 2-3 iterații. Sunt de acord, de 2-3 ori recompilați complet întregul proiect - o ocupație neplăcută. În plus, este necesară o recompilare completă pentru toți colegii.
Nu fugi cu fișiere imuabile. Includeți numai ceea ce este adesea folosit. Nu are nici un rost să includem. dacă acest lucru este necesar numai în două locuri. Acolo unde este necesar, acolo și conectați acest fișier antet.
Antetele precompilate sunt un mecanism foarte util care vă permite să măriți în mod semnificativ viteza proiectelor de compilare.