Precompiled header
कंप्यूटर प्रोग्रामिंग में, एक पूर्व-संकलित शीर्षलेख (पीसीएच) एक (सी या सी + +) शीर्षलेख फ़ाइल है जिसे एक मध्यवर्ती रूप में संकलित किया जाता है जो संकलक के लिए प्रक्रिया करने के लिए तेज़ होता है। पूर्व-संकलित शीर्षलेखों का उपयोग संकलन समय को काफी कम कर सकता है, विशेष रूप से जब बड़ी शीर्षलेख फ़ाइलों, शीर्षलेख फ़ाइलों जिसमें कई अन्य शीर्षलेख फ़ाइल शामिल हैं, या शीर्षलेख फ़ाइलों जो कई अनुवाद इकाइयों में शामिल हैं, पर लागू किया जाता है। सी और सी + + प्रोग्रामिंग भाषाओं में, एक हेडर फ़ाइल एक ऐसी फ़ाइल है जिसका पाठ स्रोत फ़ाइल में एक प्रीप्रोसेसर निर्देश का उपयोग करके सी प्रीप्रोसेसर द्वारा स्वचालित रूप से किसी अन्य स्रोत फ़ाइल में शामिल किया जा सकता है। हेडर फ़ाइलों में कभी-कभी बहुत बड़ी मात्रा में स्रोत कोड हो सकते हैं (उदाहरण के लिए, माइक्रोसॉफ्ट विंडोज और ओएस एक्स पर क्रमशः हेडर फ़ाइल windows.h और कोको/कोको. एच)। यह विशेष रूप से बड़े "हेडर" पुस्तकालयों के आगमन के साथ सच है जो टेम्प्लेट का व्यापक उपयोग करते हैं, जैसे कि आइगेन गणित पुस्तकालय और बूस्ट सी + + पुस्तकालय। वे लगभग पूरी तरह से हेडर फ़ाइलों के रूप में लिखे जाते हैं जो उपयोगकर्ता #includes, रनटाइम पर लिंक होने के बजाय। इस प्रकार, हर बार जब उपयोगकर्ता अपने प्रोग्राम को संकलित करता है, तो उपयोगकर्ता अनिवार्य रूप से कई हेडर पुस्तकालयों को भी फिर से संकलित कर रहा होता है। (इन्हें साझा वस्तुओं या गैर "हेडर" पुस्तकालयों में गतिशील लिंक पुस्तकालयों में पूर्व संकलित किया जाएगा।) संकलन के समय को कम करने के लिए, कुछ संकलक हेडर फ़ाइलों को एक ऐसे रूप में संकलित करने की अनुमति देते हैं जो संकलक के लिए प्रक्रिया करने के लिए तेज़ हो। इस मध्यवर्ती रूप को पूर्व-संकलित शीर्षलेख के रूप में जाना जाता है, और आमतौर पर इसे विस्तार. pch या इसी तरह की फ़ाइल में रखा जाता है, जैसे कि जीएनयू संकलक संग्रह के तहत. gch। उपयोग उदाहरण के लिए, एक C + + फ़ाइल source.cpp दी गई है जिसमें header.hpp:// header.hpp.// source.cpp #include "header.hpp" शामिल है। जब पहली बार source.cpp को पहले से संकलित शीर्षलेख सुविधा के साथ संकलित किया जाता है, तो संकलक एक पूर्व संकलित शीर्षलेख, header.pch उत्पन्न करेगा। अगली बार, यदि इस हेडर का टाइमस्टैम्प नहीं बदलता है, तो संकलक header.hpp से संबंधित संकलन चरण को छोड़ सकता है और इसके बजाय सीधे header.pch का उपयोग कर सकता है। सामान्य कार्यान्वयन माइक्रोसॉफ्ट विजुअल सी और सी + + माइक्रोसॉफ्ट विजुअल सी + + (संस्करण 6 और नया) किसी भी कोड को पूर्व संकलित कर सकते हैं, न कि केवल हेडर। यह दो तरीकों से किया जा सकता हैः या तो सभी कोड को एक फ़ाइल तक पूर्व संकलित करना जिसका नाम/Ycfilename विकल्प से मेल खाता है या (जब/Yc को किसी भी फ़ाइल नाम के बिना निर्दिष्ट किया जाता है) कोड में #pragma hdrstop की पहली घटना तक सभी कोड को पूर्व संकलित करना पूर्व संकलित आउटपुट को/Yc विकल्प को दिए गए फ़ाइल नाम के नाम पर एक फ़ाइल में सहेजा जाता है, एक. pch विस्तार के साथ, या/Fpfilename विकल्प द्वारा प्रदान किए गए नाम के अनुसार एक फ़ाइल में। / यू विकल्प,/वाई. सी. विकल्प के अधीनस्थ यदि एक साथ उपयोग किया जाता है, तो संकलक को ऐसी फ़ाइल से पहले से संकलित कोड का उपयोग करने का कारण बनता है। pch.h (विजुअल स्टूडियो 2017 से पहले stdafx.h नाम दिया गया) माइक्रोसॉफ्ट विजुअल स्टूडियो IDE विज़ार्ड द्वारा उत्पन्न एक फ़ाइल है, जो मानक प्रणाली और परियोजना विशिष्ट दोनों का वर्णन करती है, जिसमें ऐसी फ़ाइलें शामिल हैं जो अक्सर उपयोग की जाती हैं लेकिन शायद ही कभी बदलती हैं। stdafx.h में ए. एफ. एक्स. का अर्थ एप्लीकेशन फ्रेमवर्क एक्सटेंशन है। ए. एफ. एक्स. माइक्रोसॉफ्ट फाउंडेशन क्लासेज (एम. एफ. सी.) का मूल संक्षिप्त नाम था। जबकि संस्करण 2017 से पहले एमएसवीसी परियोजनाओं में डिफ़ॉल्ट रूप से stdafx.h नाम का उपयोग किया गया था, किसी भी वैकल्पिक नाम को मैन्युअल रूप से निर्दिष्ट किया जा सकता है। संगत संकलक समग्र संकलन समय को कम करने के लिए इस फ़ाइल को पूर्व संकलित करेंगे। विजुअल सी + + स्रोत फ़ाइल में #include "pch.h" से पहले कुछ भी संकलित नहीं करेगा, जब तक कि संकलन विकल्प/यू 'pch.h' को अनचेक नहीं किया जाता है (डिफ़ॉल्ट रूप से); यह मानता है कि उस पंक्ति को शामिल करते हुए स्रोत में सभी कोड पहले से ही संकलित हैं। जी. सी. सी. पूर्व-संकलित शीर्षकों को जी. सी. सी. (3.4 और नए) में समर्थित किया जाता है। जी. सी. सी. का दृष्टिकोण वी. सी. और संगत संकलकों के समान है। जी. सी. सी.................................................................................................................................................................................................. स्रोत फ़ाइल को संकलित करते समय, संकलक जाँच करता है कि क्या यह फ़ाइल उसी निर्देशिका में मौजूद है और यदि संभव हो तो इसका उपयोग करता है। जी. सी. सी. केवल पूर्व-संकलित संस्करण का उपयोग कर सकता है यदि वही संकलक स्विच सेट किए जाते हैं जब हेडर संकलित किया गया था और यह अधिक से अधिक एक का उपयोग कर सकता है। इसके अलावा, केवल प्रीप्रोसेसर निर्देशों को पूर्व-संकलित शीर्षलेख से पहले रखा जा सकता है (क्योंकि इसे किसी भी संकलन योग्य कोड से पहले प्रत्यक्ष या अप्रत्यक्ष रूप से किसी अन्य सामान्य शीर्षलेख के माध्यम से शामिल किया जाना चाहिए)। जी. सी. सी. स्वचालित रूप से अधिकांश शीर्षलेख फ़ाइलों को उनके विस्तार द्वारा पहचानता है। हालाँकि, यदि यह विफल हो जाता है (जैसे। गैर-मानक हेडर एक्सटेंशन के कारण),-x स्विच का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि जीसीसी फ़ाइल को हेडर के रूप में मानता है। क्लैंग संकलक ने 2009 के क्लैंग 2.5/एल. एल. वी. एम 2.5 में पी. सी. एच. के लिए समर्थन जोड़ा। संकलक दोनों इनपुट स्रोत कोड को टोकनाइज़ करता है और संकलक के आंतरिक उत्पन्न अमूर्त वाक्यविन्यास वृक्ष (ए. एस. टी.) और प्रतीक तालिका को एक पूर्व-संकलित हेडर फ़ाइल में लिखते हुए हेडर का वाक्यात्मक और शब्दार्थ विश्लेषण करता है। क्लैंग की पूर्व-संकलित हेडर योजना, कुछ सुधारों के साथ जैसे कि एक पूर्व-संकलित हेडर के लिए दूसरे को संदर्भित करने की क्षमता, आंतरिक रूप से उपयोग किया जाने वाला, पूर्व-संकलित हेडर भी इसके मॉड्यूल तंत्र के लिए आधार बनाता है। यह उसी बिटकोड फ़ाइल प्रारूप का उपयोग करता है जिसे एल. एल. वी. एम. द्वारा नियोजित किया जाता है, जो सामान्य ऑब्जेक्ट फ़ाइल प्रारूप या एक्सटेंसिबल लिंकिंग प्रारूप फ़ाइलों के भीतर क्लैंग-विशिष्ट वर्गों में समाहित होता है। सी + + बिल्डर डिफ़ॉल्ट परियोजना विन्यास में, सी + + बिल्डर संकलक निहित रूप से एक स्रोत मॉड्यूल द्वारा शामिल सभी शीर्षकों के लिए पूर्व संकलित शीर्षकों को तब तक उत्पन्न करता है जब तक कि रेखा #pragma एचडीआरस्टॉप नहीं मिल जाती। यदि संभव हो तो परियोजना के सभी मॉड्यूल के लिए पूर्व संकलित शीर्षकों को साझा किया जाता है। उदाहरण के लिए, विजुअल कम्पोनेंट लाइब्रेरी के साथ काम करते समय, पहले vcl.h हेडर को शामिल करना आम बात है जिसमें आमतौर पर उपयोग की जाने वाली अधिकांश वी. सी. एल. हेडर फाइलें होती हैं। इस प्रकार, पूर्व-संकलित शीर्षलेख को सभी परियोजना मॉड्यूल में साझा किया जा सकता है, जिससे निर्माण का समय नाटकीय रूप से कम हो जाता है। इसके अलावा, सी + + बिल्डर को विजुअल सी + + द्वारा प्रदान किए गए तंत्र के समान, पूर्व-संकलित हेडर के रूप में एक विशिष्ट हेडर फ़ाइल का उपयोग करने के लिए उपकरण बनाया जा सकता है। सी + + बिल्डर 2009 एक "पूर्व-संकलित हेडर विज़ार्ड" पेश करता है जो शामिल हेडर फ़ाइलों के लिए परियोजना के सभी स्रोत मॉड्यूल को पार्स करता है, उन्हें वर्गीकृत करता है (यानी। हेडर फ़ाइलों को बाहर करता है यदि वे परियोजना का हिस्सा हैं या उनके पास इनक्लूड गार्ड नहीं है) और निर्दिष्ट फ़ाइलों के लिए स्वचालित रूप से एक पूर्व संकलित हेडर उत्पन्न और परीक्षण करता है। प्रीटोकनाइज्ड हेडर एक प्रीटोकनाइज्ड हेडर (पी. टी. एच.) एक हेडर फ़ाइल है जिसे एक रूप में संग्रहीत किया जाता है जिसे शाब्दिक विश्लेषण के माध्यम से चलाया गया है, लेकिन इस पर कोई शब्दार्थ संचालन नहीं किया गया है। पी. टी. एच. पी. सी. एच. का समर्थन करने से पहले क्लैंग में मौजूद है, और जी. सी. सी. की एक शाखा में भी इसका परीक्षण किया गया है। एक पूर्ण पी. सी. एच. तंत्र की तुलना में, पी. टी. एच. में भाषा (और बोली) स्वतंत्रता के फायदे हैं, क्योंकि शाब्दिक विश्लेषण सी-परिवार की भाषाओं और वास्तुकला स्वतंत्रता के लिए समान है, क्योंकि विभिन्न लक्ष्य संरचनाओं के लिए संकलन करते समय टोकन की एक ही धारा का उपयोग किया जा सकता है। हालाँकि इसका नुकसान यह है कि यह सरल शाब्दिक विश्लेषण से आगे नहीं जाता है, जिसके लिए प्रत्येक संकलन के साथ सांकेतिक धारा के वाक्य रचना और शब्दार्थ विश्लेषण की आवश्यकता होती है। इसके अलावा, पहले से बोली जाने वाली फ़ाइल के आकार के साथ, शाब्दिक टोकन में, रैखिक रूप से स्केलिंग को संकलित करने का समय, जो जरूरी नहीं कि पूरी तरह से पूर्व-संकलन तंत्र (क्लैंग में पीसीएच यादृच्छिक पहुंच की अनुमति देता है) के लिए मामला हो। क्लैंग के प्रीटोकेनाइजेशन तंत्र में प्री-प्रोसेसर की सहायता के लिए कई छोटे तंत्र शामिल हैंः फ़ाइल अस्तित्व और डेटस्टैम्प जानकारी का कैशिंग, और समावेशन गार्ड को रिकॉर्ड करना ताकि संरक्षित कोड को जल्दी से छोड़ दिया जा सके। उपसर्ग शीर्षक एकल संकलन इकाई संदर्भ बाहरी लिंक पूर्व-संकलित शीर्षकों की देखभाल और पोषण जी. सी. सी. फ्रैक्टल एक्सट्रीम के साथ पूर्व-संकलित शीर्षकः पूर्व-संकलित शीर्षक स्रोत कोड सी (प्रोग्रामिंग भाषा) शीर्षक सी + +