2010-05-10 12 views
10

संभव डुप्लिकेट के बिना शामिल हैं:
What is the difference between using #include<filename> and #include<filename.h> in c++सी ++ के साथ और ज

मैंने कभी नहीं देखा है यह किसी भी परिवर्तन लाने या नहीं, मैं एक के अंत में ज शामिल शामिल है, इसलिए मैंने हमेशा अर्थ को नजरअंदाज कर दिया है, लेकिन मैंने अभी अपने किसी विशेष कार्यक्रम में देखा है, अगर मुझे "स्ट्रिंग" शामिल है तो मुझे त्रुटि मिलती है "अगर मुझे" स्ट्रिंग "शामिल है, लेकिन यदि मैं" string.h "।

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

+1

http: // stackoverflow।कॉम/प्रश्न/301586/क्या-अंतर-अंतर-बीच-उपयोग-शामिलफिल्लेनाम-और-includefilename-h –

उत्तर

22

<string> सी ++ मानक लाइब्रेरी स्ट्रिंग हेडर फ़ाइल है जिसमें std::string और उसके मित्र शामिल हैं। <string.h> सी मानक लाइब्रेरी से एक अलग शीर्षलेख है, जिसमें सी स्ट्रिंग्स (नल-टर्मिनेटेड स्ट्रिंग्स) और अन्य संबंधित कार्यों में हेरफेर करने के लिए फ़ंक्शन हैं।

दोनों पूरी तरह से अलग और असंबंधित हैं। सी ++ (सी में) के रूप में, एक हेडर फ़ाइल में कोई एक्सटेंशन हो सकता है। सी ++ मानक पुस्तकालय शीर्षलेखों का कोई विस्तार नहीं है; सी मानक लाइब्रेरी शीर्षलेखों में .h एक्सटेंशन है। .hpp या .hxx भी आम हैं।

+2

और यह भी ध्यान दें कि (मुझे विश्वास है) भले ही निर्देश शामिल है ' 'या जो भी हो, संकलक नहीं है' टी को वास्तव में संबंधित फ़ाइल 'स्ट्रिंग' को कॉल करने की आवश्यकता नहीं है। –

+0

@ मार्क बी: दरअसल; यह बिल्कुल एक फाइल भी नहीं है। मुझे ऐसे किसी भी कार्यान्वयन के बारे में पता नहीं है जो शीर्षकों के नाम से फ़ाइलों का उपयोग नहीं करता है; मुझे लगता है कि मुझे वह उलझन में मिल जाएगा! –

+3

सब कुछ जेम्स ने कहा सच है। यह भी दिलचस्प है कि अद्यतन मानक सी ++ में, सी स्ट्रिंग फ़ाइल का नाम बदलकर कर दिया गया है - वास्तव में सी सी+ मानक पुस्तकालय में प्रचारित होने पर सभी सी मानक लाइब्रेरी का नाम बदलकर 'सी' उपसर्ग और नहीं '.hh' कर दिया गया है। 'एक्सटेंशन, यानी, cstdlib, cstdio, आदि। यह मामला माना जाता है कि सी कार्यों को std नेमस्पेस में भी स्थानांतरित किया जाता है। कई कंपाइलर , et al का समर्थन करते रहते हैं, और सी मानक लाइब्रेरी को std :: में नहीं डालना जारी रखते हैं, लेकिन मेरा मानना ​​है कि उन्हें अब और करने की आवश्यकता नहीं है। – jwismar

2

वे 2 अलग-अलग फाइलें हैं और एक-दूसरे के साथ कुछ लेना देना नहीं है।

#include <string>

#include <string.h> कई कार्य को परिभाषित करता है सी तार और सरणियों हेरफेर करने के लिए सी ++ मानक पुस्तकालय एसटीएल तार को दर्शाता है।

कोई विस्तार शामिल नहीं है।

कुछ शीर्षलेख फ़ाइलों में उनके पास शामिल नहीं है। आप आमतौर पर इसे हेडर फ़ाइलों के साथ देखते हैं जिनमें टेम्पलेट होते हैं।

0

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

4

मैं बस जोड़ देंगे, कि C++ वहाँ सी हेडर string.h की तरह एक पारंपरिक सी रूप में उपलब्ध हैं और उन #include <string.h> की तरह इस्तेमाल कर रहे हैं, लेकिन वहाँ भी पत्र "सी" और बिना के साथ शुरू नाम के साथ अपने समकक्षों हैं एक एक्सटेंशन - जैसे cstring। उन शीर्षकों का उपयोग सी ++ हेडर #include <cstring> जैसे किया जाता है और उन शीर्षकों के नाम std नामस्थान में हैं।

0

कोणीय ब्रैकेट और उद्धरण चिह्नों में शामिल लोगों के बीच के अंतर के बारे में, पहले प्रोप्रोसेसर को खोजने के लिए पहले/I संकलक विकल्प द्वारा निर्दिष्ट पथ के साथ फ़ाइलों को शामिल करने के लिए निर्देश दिया जाता है। दूसरा प्रीप्रोसेसर को फ़ाइल के उसी निर्देशिका में फ़ाइलों को शामिल करने के लिए कहता है जिसमें # अंतर्निहित कथन शामिल है।

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