सभी सी ++ संकलक के पास एक गंभीर प्रदर्शन समस्या है जिससे निपटने के लिए। C ++ कोड का संकलन एक लंबी, धीमी प्रक्रिया है।
C ++ फ़ाइलों के शीर्ष पर संकलित हेडर एक बहुत लंबी, धीमी प्रक्रिया है। विंडोज हेड और अन्य बड़े एपीआई पुस्तकालयों के हिस्से के रूप में विशाल हेडर संरचनाओं को संकलित करना एक बहुत , बहुत लंबी, धीमी प्रक्रिया है। हर एक Cpp स्रोत फ़ाइल के लिए इसे ओवर-ओवर और ओवर करना पड़ता है, यह एक मौत की गाँठ है।
यह विंडोज के लिए अद्वितीय नहीं है, लेकिन सभी कंपाइलरों के सामने एक पुरानी समस्या है जो विंडोज जैसे बड़े एपीआई के खिलाफ संकलित करना है।
Microsoft कंपाइलर इस समस्या को एक सरल चाल के साथ सुलझा सकता है जिसे precompiled हेडर कहा जाता है । यह चाल बहुत ही धीमी है: हालाँकि हर CPP फ़ाइल संभावित रूप से और कानूनी तौर पर प्रत्येक सीपीपी फ़ाइल के शीर्ष पर शामिल हेडर फ़ाइलों की श्रृंखला को एक अलग अर्थ दे सकती है (अलग-अलग मैक्रोज़ होने जैसी चीज़ों में # पहले से शामिल है, या अलग-अलग क्रम में हेडरों को शामिल करते हुए), यह सबसे अधिक मामला नहीं है। अधिकांश समय, हमारे पास दर्जनों या सैकड़ों शामिल फाइलें होती हैं, लेकिन वे सभी आपके आवेदन में संकलित की जा रही सभी सीपीपी फाइलों के लिए समान अर्थ रखने के लिए अभिप्रेत हैं।
कंपाइलर भारी समय की बचत कर सकता है यदि उसे हर Cpp फ़ाइल को संकलित करने की शुरुआत नहीं करनी है और इसके दर्जनों को शाब्दिक रूप से हर बार शामिल करना है।
इस ट्रिक में एक विशेष हेडर फ़ाइल को सभी संकलन श्रृंखलाओं के शुरुआती बिंदु के रूप में नामित किया गया है, जिसे तथाकथित 'पूर्व-शीर्षक हेडर' फ़ाइल कहा जाता है, जो आमतौर पर ऐतिहासिक कारणों से केवल stdafx.h नाम की फ़ाइल होती है।
बस अपने stdafx.h फ़ाइल में एपीआई के लिए अपने सभी बड़े विशाल हेडर को उचित क्रम में सूचीबद्ध करें, और फिर अपनी सीपीपी फ़ाइलों में से प्रत्येक को #include "stdafx.h"
किसी भी सार्थक सामग्री (बस केवल पहले की अनुमति दी गई चीज़ के बारे में) से पहले शीर्ष पर शुरू करें टिप्पणियाँ)।
उन शर्तों के तहत, खरोंच से शुरू करने के बजाय , कंपाइलर सब कुछ संकलित करने के पहले से ही सहेजे गए परिणामों से संकलन करना शुरू कर देता है stdafx.h
।
मुझे विश्वास नहीं है कि यह चाल Microsoft संकलक के लिए अद्वितीय है, और न ही मुझे लगता है कि यह एक मूल विकास था।
Microsoft कंपाइलर्स के लिए, सेटिंग जो प्री-कंपाइल हेडर्स के उपयोग को नियंत्रित करती है, कंपाइलर को कमांड लाइन तर्क द्वारा नियंत्रित किया जाता है /Yu "stdafx.h"
:। जैसा कि आप कल्पना कर सकते हैं, stdafx.h
फ़ाइल नाम का उपयोग केवल एक सम्मेलन है; आप चाहें तो नाम बदल सकते हैं।
दृश्य स्टूडियो 2010 में, यह सेटिंग GUI से CPP प्रोजेक्ट पर राइट-क्लिक करके, 'गुण' का चयन करके और "कॉन्फ़िगरेशन गुण \ C / C ++ \ Precompiled Headers" पर नेविगेट करके नियंत्रित की जाती है। विजुअल स्टूडियो के अन्य संस्करणों के लिए, GUI में स्थान भिन्न होगा।
ध्यान दें कि यदि आप पहले से तैयार हेडर को अक्षम करते हैं (या अपनी परियोजना को एक उपकरण के माध्यम से चलाते हैं जो उनका समर्थन नहीं करता है), यह आपके प्रोग्राम को अवैध नहीं बनाता है; इसका सीधा सा मतलब है कि आपका टूल हर बार खरोंच से सब कुछ संकलित करेगा।
यदि आप कोई Windows निर्भरता वाली कोई लाइब्रेरी बना रहे हैं, तो आप आसानी से टिप्पणी कर सकते हैं या फाइल #include
से हटा सकते हैं stdafx.h
। प्रति से अधिक फ़ाइल को निकालने की कोई आवश्यकता नहीं है, लेकिन स्पष्ट रूप से आप ऐसा कर सकते हैं, साथ ही ऊपर दिए गए precompile शीर्षलेख सेटिंग को अक्षम करके।