प्रीकंपील्ड हेडर फ़ाइल के लिए सर्वश्रेष्ठ उम्मीदवार क्या हैं? क्या मैं वहां एसटीएल और बूस्ट हेडर रख सकता हूं, भले ही उनके पास टेम्पलेट हों? और क्या यह संकलन के समय को कम करेगा? इसके अलावा, संकलन समय को कम करने के लिए सबसे अच्छी आईडीई सेटिंग्स क्या हैं?प्रीकंपील्ड हेडर में क्या रखा जाए? (एमएसवीसी)
उत्तर
त्वरित उत्तर: एसटीएल और बूस्ट हेडर वास्तव में प्रीकंपील्ड हेडर फ़ाइल में हैं, भले ही ये हेडर फ़ाइलें टेम्पलेट कक्षाएं परिभाषित करें।
एक प्रीकंपील्ड हेडर फ़ाइल उत्पन्न करते समय, एक कंपाइलर हेडर टेक्स्ट (एक महत्वपूर्ण कार्य!) को पार करता है, और इसे कंपाइलर के लाभ के लिए अनुकूलित एक बाइनरी प्रारूप में परिवर्तित करता है।
भले ही टेम्पलेट कक्षाएं अन्य .cpp फ़ाइलों को संकलित किए जाने पर तत्काल हो जाएंगी, फिर भी उन्हें प्रीकंपील्ड हेडर में जानकारी से तत्काल किया जाएगा, जो संकलक को पढ़ने के लिए काफी तेज है।
(बाद में इसके अलावा)
एक बात है कि आप नहीं एक precompiled शीर्ष लेख में शामिल करना चाहिए फ़ाइलों को अपनी परियोजना का हिस्सा हैं और अक्सर बदल रहे हैं, भले ही हर एक .cpp फ़ाइल में शामिल कर रहे हैं इन फाइलें
इसका कारण यह है कि प्रीकंपील्ड हेडर की पीढ़ी में काफी समय लग सकता है, क्योंकि बूस्ट, एसटीएल और विंडोज लाइब्रेरी बहुत बड़ी हैं।
आपके पास एक साधारण फ़ाइल हो सकती है (उदाहरण के लिए "StringDefs.h") जो सबकुछ उपयोग करता है। यदि StringDefs.h stdafx.h में शामिल है, और एक डेवलपर StringDefs.h को छूता है, तो प्रत्येक डेवलपर को पूरे प्रीकंपील्ड हेडर रीकंपाइल तक प्रतीक्षा करना होगा। अगर स्ट्रिंगडिफ्सएच को प्रीकंपील्ड हेडर से बाहर रखा गया था, तो यह बहुत तेज होगा, और प्रत्येक .CPP फ़ाइल के साथ पार्स किया जाएगा।
यह एक उचित बिंदु है - जिसमें अक्सर बदलती फाइलें शामिल होती हैं, कुल मिलाकर बिल्डिंग समय धीमा कर देती हैं। – Andy
आपके पास प्रति .cpp फ़ाइल में केवल 1 प्रीकंपील्ड हेडर फ़ाइल हो सकती है, लेकिन आपके प्रोजेक्ट में कई प्री-कंपाइल हेडर हो सकते हैं। –
आपको पीसीएच को फिर से कंपाइल करने के लिए इंतजार नहीं करना है, बल्कि यह भी उपयोग करने वाली प्रत्येक फाइल के लिए इंतजार करना होगा। –
प्रीकंपील्ड हेडर में कुछ भी डालें कि उस परियोजना में अधिकांश .cpp फ़ाइलों को वैसे भी शामिल किया जाएगा। यह वास्तव में किसी भी शीर्षलेख फ़ाइल के लिए चला जाता है। यह संकलक को इन फ़ाइलों को एक बार पार्स करने की अनुमति देता है, और उसके बाद उसी प्रोजेक्ट में सभी .cpp फ़ाइलों में उस जानकारी का पुन: उपयोग करें।
मैं असहमत हूं, और यह बताने के लिए मेरे जवाब में एक अतिरिक्त खंड लिखा है। –
प्रीकंपिल्ड हेडर को कभी भी * प्रोजेक्ट-स्थानीय हेडर शामिल नहीं करना चाहिए – Tom
मैंने इस गलती सलाह के बाद बड़े पैमाने पर काम किया है और यह बहुत अक्षम है - हर बार जब आप संकलित करते हैं, तो सब कुछ किसी भी बदलाव के लिए संकलित होता है। – Permaquid
एंड्रयू शेफर्ड के उत्तर में एक जोड़ा। अपने प्रोजेक्ट के बाहरी हैं जो हेडर फाइलों के लिए प्रीकंपिल्ड हेडर का उपयोग करें, जो फ़ाइलों को बार-बार बदलते हैं। यदि आप वर्तमान प्रोजेक्ट में हेडर फाइलों को हर समय बदल रहे हैं, तो शायद यह उन्हें precompiling के लायक नहीं है।
मैंने तकनीक पर एक लेख लिखा है जो संकलन समय को कम करता है। इन तकनीकों में से प्रीकंपिल्ड हेडर और उसके आवेदन पर एक पोस्ट here पाया जा सकता है। इसमें सर्वोत्तम प्रथाओं पर एक अनुभाग भी है जो आपको दिलचस्प लग सकता है। सीएमके स्क्रिप्ट जो इसे पारदर्शी रूप से संभालती हैं शामिल हैं।
- 1. एमएसवीसी - हेडर में चेतावनी रोकें
- 2. प्रीकंपील्ड हेडर? क्या हमें वास्तव में उनकी आवश्यकता है
- 3. विजुअल स्टूडियो के प्रीकंपील्ड हेडर में क्या होता है?
- 4. संसाधन कहां रखा जाए?
- 5. कहां रखा जाए। Hgignore?
- 6. AdMob प्रचार में DisplayUrl में क्या रखा जाए?
- 7. एमएसवीसी
- 8. लार्वेल में मेनू तर्क कहां रखा जाए?
- 9. जीएनयू का उपयोग करके कई प्रीकंपील्ड हेडर फाइलें बनाना
- 10. हाइबरनेट एनोटेशन कहां रखा जाए?
- 11. django मॉडल में timedelta कैसे रखा जाए?
- 12. जीसीसी बिल्ड समय प्रीकंपील्ड हेडर से अधिक लाभ नहीं देता
- 13. रेल में कोड स्निपेट कहां रखा जाए?
- 14. आवेदन राज्य कहां रखा जाए?
- 15. Symfony2 में व्यावसायिक तर्क कहां रखा जाए?
- 16. प्रीकंपील्ड हेडर (सी/सी ++) का उपयोग क्यों करें?
- 17. प्रीकंपील्ड हेडर से बचने के लिए कैसे करें
- 18. बंडल में एक रननेबल कैसे रखा जाए?
- 19. स्विच के डिफ़ॉल्ट लेबल में क्या रखा जाए?
- 20. एमएसवीसी
- 21. एमएसवीसी ++
- 22. एमएसवीसी
- 23. एमएसवीसी ++
- 24. क्या मुझे एमएसवीसी - पी
- 25. एमएसवीसी
- 26. एमएसवीसी
- 27. एमएसवीसी
- 28. डब्ल्यूपीएफ प्रिज्म - संसाधन कहां रखा जाए?
- 29. रेल - डेटा फ़ाइलों को कहां रखा जाए?
- 30. किसी फ़ंक्शन में पैरामीटर में '&' कहां रखा जाए?
मैं पीसीएच का उपयोग नहीं करना पसंद करता हूं। कारण हैं (1) मुझे सबसे पहले एक सीपीपी फ़ाइल में इसके संबंधित शीर्षलेख के रूप में शामिल करना पसंद है ताकि आप हेडर संकलन (2) को जान सकें, मेरा अनुभव यह है कि पीएच के साथ निर्भरता चेसिंग पूरी तरह से विश्वसनीय नहीं है, और इसके परिणामस्वरूप वृद्धिशील अविश्वसनीय बनता है बहुत बड़ी परियोजनाओं में। मेरी राय में यह संतुलन पर अधिक कुशल है कि पीएच का उपयोग न करें और विश्वसनीय वृद्धिशील बिल्डों के लाभों का आनंद लें। यह अब हालिया विजुअल स्टूडियो संस्करणों के साथ मामला नहीं हो सकता है - इसके साथ मेरा अनुभव अभी भी न्याय करने के लिए पर्याप्त नहीं है। – Permaquid