2012-12-03 10 views
5

संभव डुप्लिकेट:
What is the difference between #include <filename> and #include “filename”?# stdio.h "काम क्यों शामिल है?

संकलक क्यों शिकायत नहीं है जब मैं निम्नलिखित लिखें:

#include "stdio.h" 

यह हो नहीं करना चाहिए

#include <stdio.h> 
इसके बजाय

, क्योंकि stdio.h वास्तव में लाइब्रेरी फ़ोल्डर में संग्रहीत है और अनुवाद इकाई के फ़ोल्डर में नहीं है? वैसे भी यह क्यों काम करता है?

+1

'" ... "' स्थानीय रूप से * पहले *, और फिर कहीं और दिखता है। – BoBTFish

+1

नहीं, यह वास्तव में '#inlcude ' – 111111

+1

http://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename – BoBTFish

उत्तर

8

"" और <> के बीच का अंतर बहुत अधिक नहीं है। कार्यान्वयन-परिभाषित स्थानों में हेडर की खोज दोनों 1, 2। अंतर यह है कि यदि वह खोज "" के लिए विफल होती है, तो खोज होती है जैसे कि यह <> का उपयोग कर रहा था। (§16.2)

मूल रूप से, इसका मतलब है कि अगर <> एक निश्चित नाम के साथ एक शीर्ष लेख पाता है, "" एक ही नाम के साथ एक शीर्ष लेख को खोजने के लिए विफल नहीं हुआ।


ये कार्यान्वयन से परिभाषित स्थानों दोनों रूपों के लिए एक ही होने की जरूरत नहीं है।

कोई आवश्यकता नहीं है कि इनमें से एक खोज लाइब्रेरी फ़ोल्डर और अन्य टीयू के फ़ोल्डर को खोजें। कंपाइलर को पूरे फाइल सिस्टम को खोजने की अनुमति है और यदि चाहें तो इसके लिए Google भी है।

इसका मतलब यह नहीं है कि वे हमेशा एक ही शीर्षलेख पाते हैं।

+0

हालांकि, एक आवश्यकता है, कि अगर '# शामिल "xxx" विफल रहता है, तो संकलक इसे पुन: संसाधित करता है जैसे कि यह #शामिल है। –

+0

@ जेम्स मैं यही तीसरा वाक्य का मतलब था। क्या आपको लगता है कि मुझे इसे फिर से लेना चाहिए, या क्या आपको याद आया? स्रोत फ़ाइलों को googling के लिए –

+0

+1 :-) – Angew

0

यह वाक्यविन्यास को परिभाषित करने के तरीके के कारण है।

#include <cstdio> मतलब यह है कि संकलक मानक पुस्तकालय cstdio

#include "cstdio" का मतलब संकलक फ़ाइल "cstdio" खोजने के लिए प्रयास करना चाहिए, मौजूदा निर्देशिका में मुख्य रूप से देख रही है और एक वापस आने के रूप में मानक पुस्तकालयों के स्थान का उपयोग कर शामिल होना चाहिए ।

+2

या तो '# शामिल करें <> 'या' # शामिल करें "या नहीं," वर्तमान निर्देशिका में पहले या बिल्कुल पूरी तरह से कार्यान्वित परिभाषित किया गया है या नहीं। –

0

"" बनाम <> केवल लुकअप के क्रम को बदलता है।

तो

साथ
#include "stdio.h" 

precompiler अनुवाद इकाई की निर्देशिका से देखने शुरू कर देंगे, और फिर पूर्वनिर्धारित को स्थानांतरित निर्देशिका "शामिल हैं"

जबकि

#include <stdio.h> 

दूसरी तरह के आसपास है

+0

@ चार्ल्सबैली लेकिन व्यावहारिक रूप से, यह आम तौर पर स्वीकार किया जाता है कि "..." में पहली बार निर्देशिका में शामिल होना चाहिए जिसमें फ़ाइल शामिल है। (दूसरी तरफ, मुझे नहीं लगता कि किसी भी कंपाइलर को शामिल करने के लिए वर्तमान निर्देशिका में देखेंगे, जब तक कि आप इसे '-I.' पास नहीं करते हैं या जो फ़ाइल वह पढ़ रहा है वह वर्तमान निर्देशिका में है।) –

+0

@ चार्ल्सबीली, जहां क्या मैंने ** वर्तमान ** निर्देशिका के बारे में कुछ भी कहा? –

+0

@aleguna: क्षमा करें, "वर्तमान निर्देशिका" के लिए "अनुवाद इकाई के लिए प्रारंभिक स्रोत फ़ाइल वाली निर्देशिका" संकलित की जा रही है "। मैं आलसी था। –

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