2017-01-11 5 views
6

विकी संदर्भ में उल्लेख किया गया है कि कुछ शीर्षकों में कभी-कभी बड़ी मात्रा में स्रोत कोड होता है और इसलिए उन्हें पहले संकलित हेडर के रूप में संकलन समय बचाएगा। https://en.wikipedia.org/wiki/Precompiled_headerप्री-कंपाइल हेडर और प्री-कंपाइल बाइनरी

यदि प्रीकंपील्ड हेडर में संकलित स्रोत कोड हो सकता है तो यह पूर्व संकलित बाइनरी से अलग कैसे होता है।

+3

गैर-प्रीकंपिल्ड बाइनरी जैसी कोई चीज़ नहीं है, इसलिए 'पूर्व-संकलित बाइनरी' की अवधारणा वास्तव में किसी और चीज की तुलना किसी अन्य चीज़ की तुलना में नहीं है। – EJP

+0

इंगित करने के लिए धन्यवाद ... मुझे लगता है कि इसे पूर्व-संकलित स्रोत – bharath

उत्तर

2

सी ++ "अनुवाद इकाई" की धारणा को परिभाषित करता है। एक अनुवाद इकाई एक एंकर बिंदु है जहां अनुवाद शुरू होता है, और एक कार्यक्रम में आमतौर पर ऐसी कई अनुवाद इकाइयां शामिल होती हैं। कंपाइलर को कौन सी इकाइयां पास की जाती हैं क्योंकि "अनुवाद इकाई" वास्तव में आपके आईडीई, मेकफ़ाइल पर और अन्य कॉन्फ़िगरेशन की सेटिंग्स पर निर्भर करती है। लेकिन अनौपचारिक रूप से अधिकतर कॉन्फ़िगरेशन आपके .cpp और .c - फ़ाइलों को अनुवाद इकाइयों के रूप में लेते हैं।

इसे आसान बनाने के लिए, हम एक अनुवाद इकाई के बारे में सोच सकते हैं, जिसमें से कुछ कंपाइलर बाइनरी बनाता है, और एक लिंकर एक प्रोग्राम में कई बाइनरी जोड़ता है।

तो हेडर फ़ाइलों को आमतौर पर अनुवाद इकाइयों के रूप में कॉन्फ़िगर नहीं किया जाता है, और वे आमतौर पर एक बाइनरी नहीं देते हैं, भले ही उनमें स्रोत कोड हो। उन्हें अनुवाद इकाइयों से आयात करने के बारे में सोचा जाता है और उन्हें उनके साथ संकलित किया जाएगा।

यदि ऐसी हेडर फ़ाइलों में बहुत से स्रोत कोड शामिल हैं, जो कई अनुवाद इकाइयों में शामिल किए जाएंगे, तो यह समझ में आता है कि उन्हें एक बार संकलित करना होगा और एक मध्यवर्ती परिणाम में जितना संभव हो उतना जानकारी रखें, वास्तविक अनुवाद इकाई संकलित करना तेज़ है। यह समय बचाता है, लेकिन "इंटरमीडिएट बाइनरी" कुछ आंतरिक है और खुलासा नहीं है।

हालांकि, सामग्री और स्रोत कोड के प्रकार से, एक हेडर फ़ाइल अन्य स्रोत कोड फ़ाइलों से अलग नहीं है। आप कंपाइलर को अनुवाद इकाई के रूप में "हेडर फ़ाइल" पास कर सकते हैं, और संकलक वास्तव में इसमें से "सामान्य" बाइनरी बना देगा। यह वास्तव में सिर्फ इतना है कि उन्हें आम तौर पर संकलन के लिए रूट के रूप में घोषित नहीं किया जाता है।

उम्मीद है कि मदद करता है।

1

मुख्य अंतर एक संकलित स्रोत की तुलना में प्रीकंपील्ड हेडर में संग्रहीत जानकारी का अधिक है। यदि आप परिभाषित करने के बारे में एक बाइनरी जानकारी के स्रोत को संकलित करते हैं और टेम्पलेट खो जाते हैं। परिभाषित करता है कि उनके मूल्यों और टेम्पलेट्स को गायब कर दिया जाता है, केवल बाइनरी में तत्काल रूप में मिलता है। एक प्रीकंपील्ड हेडर टेम्पलेट के सामान्य रूप और परिभाषित करने के नाम और मूल्यों के बारे में जानकारी रखता है, क्योंकि प्रीकंपील्ड हेडर कहीं भी शामिल है। शुद्ध स्रोत प्रीकंपील्ड हेडर के लिए संकलित स्रोत के समान हैं।

+0

के रूप में जाना जाना चाहिए "शुद्ध स्रोत प्रीकंपलीड हेडर के लिए संकलित स्रोत के समान हैं।" क्या मुझे लगता है कि, .pch फ़ाइल बनाई जाने पर स्रोत कोड भाग सीधे बाइनरी रूप में परिवर्तित हो जाता है। – bharath

+1

पहला: इनलाइन फ़ंक्शंस के बगल में हेडर फ़ाइल में कोई वास्तविक कोड नहीं होना चाहिए। इनलाइन सामानों को शायद वास्तविक बाइनरी में परिवर्तित किया जाएगा और उपयोग के स्थान पर कॉपी किया जाएगा। फ़ंक्शन-जैसी मैक्रोज़ और टेम्पलेट्स जैसी सभी चीज़ें, जो हेडर फ़ाइलों में कोड के सबसे प्रमुख भाग हैं, को बाइनरी कोड में स्थानांतरित नहीं किया जा सकता है, क्योंकि वे तर्क के आधार पर हैं। – user6556709

संबंधित मुद्दे