मान लीजिए कि मेरे पास कई प्रीप्रोसेसर निर्देशों के साथ एक स्रोत फ़ाइल है। क्या यह देखना संभव है कि प्रीप्रोसेसर के साथ यह कैसा दिखता है?
मान लीजिए कि मेरे पास कई प्रीप्रोसेसर निर्देशों के साथ एक स्रोत फ़ाइल है। क्या यह देखना संभव है कि प्रीप्रोसेसर के साथ यह कैसा दिखता है?
जवाबों:
cl.exe
Microsoft Visual C ++ के लिए कमांड लाइन इंटरफ़ेस, प्रीप्रोसेड फ़ाइल को आउटपुट करने के लिए तीन अलग-अलग विकल्प हैं (इसलिए विजुअल C ++ के बारे में पिछली प्रतिक्रियाओं में असंगति):
/E
: स्टडआउट के लिए प्रीप्रोसेस (जीसीसी के -E विकल्प के समान)/P
: फाइल करने के लिए प्रीप्रोसेस/EP
: # लाइन निर्देशों के बिना stdout करने के लिए प्रीप्रोसेसयदि आप #line निर्देशों के बिना किसी फ़ाइल को प्रीप्रोसेस करना चाहते हैं, तो विकल्पों /P
और /EP
विकल्पों को मिलाएं ।
/P
obj फ़ाइलों की पीढ़ी को दबा देगा। इसलिए यदि आप /P
विकल्प डालते हैं, तो आपको लिंक में त्रुटि हो सकती है जिसमें कहा जा सकता है कि कुछ obj फाइलें नहीं मिल सकती हैं क्योंकि यह वास्तव में उत्पन्न नहीं होती है।
VS Developer command prompt
उसमें नहीं हैं । कंपाइलर पारंपरिक कॉमैंड प्रॉम्प्ट में उपलब्ध नहीं है। Command prompt
cl
अधिकांश कंपाइलरों में प्रीप्रोसेसर चलाने का विकल्प होता है। उदाहरण के लिए , जीसीसी प्रदान करता है:
-E Stop after the preprocessing stage; do not run the compiler proper.
The output is in the form of preprocessed source code, which is sent
to the standard output.
तो आप बस चला सकते हैं:
gcc -E foo.c
यदि आपको ऐसा कोई विकल्प नहीं मिल रहा है, तो आप बस अपनी मशीन पर C प्रीप्रोसेसर भी पा सकते हैं। इसे आमतौर पर सीपीपी कहा जाता है और शायद यह पहले से ही आपके रास्ते में है। इसे इस तरह लागू करें:
cpp foo.c
यदि ऐसे हेडर हैं, जिन्हें आपको अन्य निर्देशिकाओं से शामिल करने की आवश्यकता है, तो आप इन दोनों में से किसी को भी एक नियमित संकलन के साथ पारित कर सकते हैं -I / पाथ / to / to / / / dir शामिल हैं।
विंडोज के लिए, मैं उत्तर देने के लिए अन्य पोस्टरों पर छोड़ दूँगा क्योंकि मैं वहां कोई विशेषज्ञ नहीं हूं।
समाधान एक्सप्लोरर, गोटो गुण पर फ़ाइल पर राइट-क्लिक करें। कॉन्फ़िगरेशन गुणों के तहत-> C / C ++ -> प्रीप्रोसेसर, "जनरेट प्रीप्रोसेसर फ़ाइल" वह है जिसे आप ढूंढ रहे हैं। फिर समाधान एक्सप्लोरर में फ़ाइल पर राइट-क्लिक करें और "संकलन" चुनें। प्रीप्रोसेस की गई फ़ाइल आउटपुट डायरेक्टरी (जैसे रिलीज़, डीबग) में एक एक्सटेंशन .i (अपनी टिप्पणी के लिए स्टीड के लिए धन्यवाद) के साथ बनाई गई है।
Release
। Debug
) में एक्सटेंशन के साथ बनाई गई है .i
।
आपको आमतौर पर प्रीप्रोसेसर के आउटपुट पर कुछ पोस्टप्रोसेसिंग करने की आवश्यकता होती है, अन्यथा सभी मैक्रोज़ सिर्फ एक लाइनर तक विस्तारित होते हैं, जो पढ़ना और डीबग करना कठिन है। सी कोड के लिए, निम्नलिखित की तरह कुछ पर्याप्त होगा:
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c
C ++ कोड के लिए, यह वास्तव में बहुत कठिन है। GCC / g ++ के लिए, मुझे यह पर्ल स्क्रिप्ट उपयोगी लगी ।
मुझे Microsoft कंपाइलर के बारे में कुछ नहीं पता, लेकिन GCC पर आप इसका उपयोग कर सकते हैं:
gcc -E -P -o result.c my_file.h
यदि आप टिप्पणियों का उपयोग देखना चाहते हैं:
gcc -E -C -P -o result.c my_file.h
इस पृष्ठ पर उपलब्ध अधिक विकल्प ।
Visual Studio में आप / P के साथ फ़ाइल (या प्रोजेक्ट) संकलित कर सकते हैं।
जैसा कि bk1e और एंड्रियास एम। ने उत्तर दिया, कंपाइलर के लिए P विकल्प एक फाइल को प्रीप्रोसेस करने का कारण होगा। हालाँकि, VS2005 और प्लेटफ़ॉर्म बिल्डर (एक एम्बेडेड ARM प्रोसेसर के लिए) का उपयोग करने वाली मेरी परियोजना में, परियोजना ने उस विकल्प को सक्षम करने के लिए संवाद बॉक्स (जैसा कि जिम बी द्वारा वर्णित है) में एक विकल्प प्रस्तुत नहीं किया।
मैं सीएल को मैन्युअल रूप से चला सकता हूं और पी / जोड़ सकता हूं, लेकिन यह विफल हो गया क्योंकि मुझे सभी उपयुक्त कमांड-लाइन विकल्पों के बारे में नहीं पता था जो कि प्लेटफॉर्म बिल्डर द्वारा पूर्ण निर्माण के दौरान अदृश्य रूप से सक्रिय किए जा रहे थे। इसलिए मुझे उन सभी विकल्पों को जानना आवश्यक था।
मेरा समाधान बिल्ड.लॉग फ़ाइल में देखने के लिए गया था, और निष्पादित लाइन को ढूंढें
CL blah-blah-blah myfile.c
मैंने इस लाइन को क्लिपबोर्ड पर कॉपी किया। "ब्ला-ब्ला-ब्लाह" भाग में बिल्ड विकल्प थे, और विशाल था।
IDE में वापस, मैंने myfile.c पर राइट-क्लिक किया, "ओपन बिल्ड विंडो" चुना, और फिर उस विंडो में मैंने बिल्ड कमांड-लाइन को चिपकाया, और "/ P" जोड़ा।
CL /P blah-blah-blah myfile.c
किया हुआ। Myfile.i फ़ाइल का उत्पादन किया गया था, जिसमें प्रीप्रोसेसर आउटपुट था।
CPIP पायथन में लिखा गया एक नया C / C ++ प्रीप्रोसेसर है। यदि आप किसी पूर्वप्रकाशित फ़ाइल का विस्तृत दृश्य प्रतिनिधित्व चाहते हैं, तो उसे शॉट दें।
सीपीआईपी पायथन में लागू एक C / C ++ प्री-प्रोसेसर है। अधिकांश पूर्व-प्रोसेसर पूर्व-प्रसंस्करण को एक गंदे काम के रूप में मानते हैं जिसे बस जल्द से जल्द किया जाना है। यह प्री-प्रोसेसिंग स्टेज पर सूक्ष्म दोषों को ट्रैक करने के लिए बहुत कठिन बना सकता है क्योंकि प्री-प्रोसेसर सस्ते में परिणाम प्राप्त करने के पक्ष में बहुत सारी उपयोगी जानकारी फेंक देते हैं।
कुछ डेवलपर्स वास्तव में पूर्व-प्रसंस्करण को समझते हैं, बहुत से यह काले जादू का एक अस्पष्ट सा है। CPIP का उद्देश्य सुधार करना है और प्रीप्रोसेसिंग के हर विवरण को रिकॉर्ड करके CPIP फ़ाइल निर्भरता, मैक्रो उपयोग आदि के बारे में कुछ अद्भुत दृश्य जानकारी का उत्पादन कर सकता है।
CPIP को cpp (या किसी अन्य स्थापित प्री-प्रोसेसर) के प्रतिस्थापन के लिए डिज़ाइन नहीं किया गया है, इसके बजाय CPIP स्पष्टता और समझ को प्रसंस्करण की गति से अधिक महत्वपूर्ण मानता है।