2015-10-12 7 views
17

मैं संकलन प्रक्रिया को समझने की कोशिश कर रहा हूं। हम का उपयोग करके पूर्वप्रक्रमक मध्यवर्ती फ़ाइल देख सकते हैं:जीसीसी के साथ सी संकलन करते समय preprocessed .i फ़ाइलों में संख्याओं का क्या मतलब है?

gcc -E hello.c -o hello.i 

या

cpp hello.c > hello.i 

मैं मोटे तौर पर पता है कि पूर्वप्रक्रमक करता है, लेकिन मैं लाइनों में से कुछ में संख्या को समझने कठिनाइयों की है। उदाहरण के लिए:

# 1 "/usr/include/stdc-predef.h" 1 3 4 
# 1 "<command-line>" 2 
# 1 "hello.c" 
# 1 "/usr/include/stdio.h" 1 3 4 
# 27 "/usr/include/stdio.h" 3 4 
# 1 "/usr/include/features.h" 1 3 4 
# 374 "/usr/include/features.h" 3 4 

संख्याएं संख्या संख्याओं को प्रदर्शित करने के लिए डीबगर की सहायता कर सकती हैं। तो पहले कॉलम के लिए मेरा अनुमान कॉलम # 2 फ़ाइल के लिए लाइन नंबर है। लेकिन निम्नलिखित संख्या क्या करती है?

1:

+0

की संभावित डुप्लिकेट (http://stackoverflow.com/प्रश्न/5370539/क्या-अर्थ-ऑफ-द-अर्थ-ऑफ़-लाइन-स्टार्ट-ए-हैश-साइन-एंड-नंबर-जैसी-1-एसी) – jww

उत्तर

8

फ़ाइल नाम निम्नलिखित संख्या झंडे हैं, तो यह एक नई फ़ाइल की शुरुआत का संकेत है।

2: यह एक फ़ाइल पर लौटने का संकेत देता है (एक और फ़ाइल शामिल करने के बाद)।

3: यह इंगित करता है कि निम्न पाठ सिस्टम हेडर फ़ाइल से आता है, इसलिए कुछ चेतावनियों को दबाया जाना चाहिए।

4: यह इंगित करता है कि निम्न पाठ को एक अंतर्निहित बाहरी "सी" ब्लॉक में लपेटा जाना चाहिए।

स्रोत: [? एक हैश संकेत और जीसीसी पूर्वप्रक्रमक उत्पादन में '# 1 "ac"' की तरह संख्या के साथ शुरू लाइनों का अर्थ क्या है] https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

+0

धन्यवाद। यह बहुत उपयोगी जानकारी है। मैं अभी भी यह समझने की कोशिश कर रहा हूं कि यह तस्वीर में कैसे फिट है। क्या आप थोड़ा सा समझा सकते हैं? मैं आपके स्रोत के आधार पर अपना शोध भी जारी रखूंगा, देखें कि इन झंडे का अर्थ कैसे लिया गया है। – Conan

+0

मेरा मानना ​​है कि 1 और 2 झंडे शामिल फाइलों की नेस्टेड प्रकृति का विचार देने के लिए हैं, इसलिए यह स्पष्ट है कि किसने शामिल किया। सिस्टम हेडर में ऐसी संरचनाएं हो सकती हैं जो गैर मानक हैं, इसलिए 3 ध्वज कंपाइलर को बताता है कि उन संरचनाओं में उस संरचना में स्वीकार्य हैं। और चूंकि हेडर फ़ाइलों को या तो सी या सी ++ स्रोत द्वारा शामिल किया जा सकता है, इसलिए 4 ध्वज सी ++ कंपाइलर को किसी भी नाम को मैंगलिंग करने के लिए नहीं जानता है। – dbush

+0

जीसीसी के हाल के संस्करण शामिल हैं- फाइलों के उत्तराधिकार को दिखाने के लिए "नेस्टेड प्रकृति" का उपयोग कर सकते हैं जहां समस्या है। यह बहस योग्य है कि क्या यह उपयोगी है, क्योंकि नए संस्करणों ने नए प्रकार की जांच या बेहतर विश्लेषण की पेशकश नहीं की है, और नतीजतन मौजूदा छोटी समस्याओं को आसानी से बढ़ाया गया है। –

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