मैं Visual Studio में प्रीप्रोसेसिंग के बाद C / C ++ स्रोत फ़ाइल कैसे देख सकता हूँ?


206

मान लीजिए कि मेरे पास कई प्रीप्रोसेसर निर्देशों के साथ एक स्रोत फ़ाइल है। क्या यह देखना संभव है कि प्रीप्रोसेसर के साथ यह कैसा दिखता है?


यह मदद करेगा यदि आप अधिक जानकारी प्रदान करते हैं जैसे कि कौन सा संकलक आप उपयोग कर रहे हैं।
JaredPar

मैं वर्तमान में अपने आईडीई के रूप में विजुअल स्टूडियो 2005 का उपयोग कर रहा हूं।
जियो

फिर डिफ़ॉल्ट रूप से आप cl.exe कंपाइलर का उपयोग कर रहे हैं।
मार्टिन न्यूयॉर्क

3
जब उसने कहा कि वह VS2005 का उपयोग कर रहा था तो एक जीसीसी जवाब क्यों स्वीकार किया गया?
जिम बॅक

जवाबों:


147

cl.exeMicrosoft Visual C ++ के लिए कमांड लाइन इंटरफ़ेस, प्रीप्रोसेड फ़ाइल को आउटपुट करने के लिए तीन अलग-अलग विकल्प हैं (इसलिए विजुअल C ++ के बारे में पिछली प्रतिक्रियाओं में असंगति):

यदि आप #line निर्देशों के बिना किसी फ़ाइल को प्रीप्रोसेस करना चाहते हैं, तो विकल्पों /Pऔर /EPविकल्पों को मिलाएं ।


1
मैं nmake और Makefile के साथ प्रोजेक्ट के लिए इन कमांड को कैसे पास करूं?
वूडज़ू

@WooDzu एक पारंपरिक मेकफाइल का उपयोग करके विज़ुअल C ++ प्रोजेक्ट्स बनाने वाले कार्यों को स्वचालित करने के लिए NMAKE (nmake.exe) का उपयोग करें। ~ msdn.microsoft.com/en-us/library/f35ctcxw.aspx
G.Rassovsky

8
कृपया ध्यान दें कि /Pobj फ़ाइलों की पीढ़ी को दबा देगा। इसलिए यदि आप /Pविकल्प डालते हैं, तो आपको लिंक में त्रुटि हो सकती है जिसमें कहा जा सकता है कि कुछ obj फाइलें नहीं मिल सकती हैं क्योंकि यह वास्तव में उत्पन्न नहीं होती है।
smwikipedia

सुनिश्चित करें कि जब आप एमएस कंपाइलर ( ) का उपयोग करने का प्रयास कर रहे हैं, तो आप VS Developer command promptउसमें नहीं हैं । कंपाइलर पारंपरिक कॉमैंड प्रॉम्प्ट में उपलब्ध नहीं है। Command promptcl
dmytro.poliarush 11

VS2019 समुदाय: / P LNK 1104 त्रुटि अभी भी प्रेस से गर्म है।
लॉरी स्टर्न

119

अधिकांश कंपाइलरों में प्रीप्रोसेसर चलाने का विकल्प होता है। उदाहरण के लिए , जीसीसी प्रदान करता है:

   -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 शामिल हैं।

विंडोज के लिए, मैं उत्तर देने के लिए अन्य पोस्टरों पर छोड़ दूँगा क्योंकि मैं वहां कोई विशेषज्ञ नहीं हूं।



100

समाधान एक्सप्लोरर, गोटो गुण पर फ़ाइल पर राइट-क्लिक करें। कॉन्फ़िगरेशन गुणों के तहत-> C / C ++ -> प्रीप्रोसेसर, "जनरेट प्रीप्रोसेसर फ़ाइल" वह है जिसे आप ढूंढ रहे हैं। फिर समाधान एक्सप्लोरर में फ़ाइल पर राइट-क्लिक करें और "संकलन" चुनें। प्रीप्रोसेस की गई फ़ाइल आउटपुट डायरेक्टरी (जैसे रिलीज़, डीबग) में एक एक्सटेंशन .i (अपनी टिप्पणी के लिए स्टीड के लिए धन्यवाद) के साथ बनाई गई है।


9
VS2010 में "प्रीप्रोसेस टू ए फाइल"।
रॉब डब्ल्यू

18
BTW, फ़ाइल आउटपुट डायरेक्टरी (उदा ReleaseDebug) में एक्सटेंशन के साथ बनाई गई है .i
घोड़ा

1
यह बहुत मदद करता है क्योंकि यह प्रोजेक्ट में पहले से स्थापित कॉन्फ़िगरेशन का उपयोग करता है ताकि सभी सही हेडर मिल सकें।
इन्नह

नोट, मेरे लिए MSVC 2015 पर, .i फ़ाइल आउटपुट डायरेक्टरी में नहीं थी , लेकिन प्रोजेक्ट की इंटरमीडिएट डायरेक्टरी में थी । यदि आप उदाहरण के लिए CMake का उपयोग कर अपनी परियोजनाएँ बनाते हैं तो ये समान नहीं हैं।
user1556435

19

आपको आमतौर पर प्रीप्रोसेसर के आउटपुट पर कुछ पोस्टप्रोसेसिंग करने की आवश्यकता होती है, अन्यथा सभी मैक्रोज़ सिर्फ एक लाइनर तक विस्तारित होते हैं, जो पढ़ना और डीबग करना कठिन है। सी कोड के लिए, निम्नलिखित की तरह कुछ पर्याप्त होगा:

gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c

C ++ कोड के लिए, यह वास्तव में बहुत कठिन है। GCC / g ++ के लिए, मुझे यह पर्ल स्क्रिप्ट उपयोगी लगी


8

मुझे Microsoft कंपाइलर के बारे में कुछ नहीं पता, लेकिन GCC पर आप इसका उपयोग कर सकते हैं:

gcc -E -P -o result.c my_file.h

यदि आप टिप्पणियों का उपयोग देखना चाहते हैं:

gcc -E -C -P -o result.c my_file.h

इस पृष्ठ पर उपलब्ध अधिक विकल्प ।


1
यह भी gcc- व्युत्पन्न संकलक के साथ काम करता है, जैसे qcc.exe - धन्यवाद!
ऋषि

8

cl /EPयदि आप Microsoft के C ++ कंपाइलर का उपयोग कर रहे हैं तो कोशिश करें ।



5

जैसा कि bk1e और एंड्रियास एम। ने उत्तर दिया, कंपाइलर के लिए P विकल्प एक फाइल को प्रीप्रोसेस करने का कारण होगा। हालाँकि, VS2005 और प्लेटफ़ॉर्म बिल्डर (एक एम्बेडेड ARM प्रोसेसर के लिए) का उपयोग करने वाली मेरी परियोजना में, परियोजना ने उस विकल्प को सक्षम करने के लिए संवाद बॉक्स (जैसा कि जिम बी द्वारा वर्णित है) में एक विकल्प प्रस्तुत नहीं किया।

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

मेरा समाधान बिल्ड.लॉग फ़ाइल में देखने के लिए गया था, और निष्पादित लाइन को ढूंढें

CL blah-blah-blah myfile.c

मैंने इस लाइन को क्लिपबोर्ड पर कॉपी किया। "ब्ला-ब्ला-ब्लाह" भाग में बिल्ड विकल्प थे, और विशाल था।

IDE में वापस, मैंने myfile.c पर राइट-क्लिक किया, "ओपन बिल्ड विंडो" चुना, और फिर उस विंडो में मैंने बिल्ड कमांड-लाइन को चिपकाया, और "/ P" जोड़ा।

CL /P blah-blah-blah myfile.c

किया हुआ। Myfile.i फ़ाइल का उत्पादन किया गया था, जिसमें प्रीप्रोसेसर आउटपुट था।


2

CPIP पायथन में लिखा गया एक नया C / C ++ प्रीप्रोसेसर है। यदि आप किसी पूर्वप्रकाशित फ़ाइल का विस्तृत दृश्य प्रतिनिधित्व चाहते हैं, तो उसे शॉट दें।

सीपीआईपी पायथन में लागू एक C / C ++ प्री-प्रोसेसर है। अधिकांश पूर्व-प्रोसेसर पूर्व-प्रसंस्करण को एक गंदे काम के रूप में मानते हैं जिसे बस जल्द से जल्द किया जाना है। यह प्री-प्रोसेसिंग स्टेज पर सूक्ष्म दोषों को ट्रैक करने के लिए बहुत कठिन बना सकता है क्योंकि प्री-प्रोसेसर सस्ते में परिणाम प्राप्त करने के पक्ष में बहुत सारी उपयोगी जानकारी फेंक देते हैं।

कुछ डेवलपर्स वास्तव में पूर्व-प्रसंस्करण को समझते हैं, बहुत से यह काले जादू का एक अस्पष्ट सा है। CPIP का उद्देश्य सुधार करना है और प्रीप्रोसेसिंग के हर विवरण को रिकॉर्ड करके CPIP फ़ाइल निर्भरता, मैक्रो उपयोग आदि के बारे में कुछ अद्भुत दृश्य जानकारी का उत्पादन कर सकता है।

CPIP को cpp (या किसी अन्य स्थापित प्री-प्रोसेसर) के प्रतिस्थापन के लिए डिज़ाइन नहीं किया गया है, इसके बजाय CPIP स्पष्टता और समझ को प्रसंस्करण की गति से अधिक महत्वपूर्ण मानता है।


2

Windows OS पर, इस प्रश्न का एक सरल उत्तर यह है कि प्रीप्रोसेस की गई फ़ाइल को देखने के लिए DOS प्रॉम्प्ट में नीचे कमांड का उपयोग करें:

CL /P /C myprogram.c

यह myprogram.i नामक एक फ़ाइल उत्पन्न करेगा । इसे खोलें और अपने विस्तारित प्रीप्रोसेसर के लिए देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.