2009-04-11 12 views
9

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

जो मैं चाहता हूं वह एक संपादक है जो मुझे यह निर्दिष्ट करने की अनुमति देगा कि प्रीप्रोसेसर मूल्य क्या प्रभावी हैं और मुझे केवल प्रासंगिक कोड दिखाएं। मेरे पास विम मिलान #ifdef और #endif से मेल खाने में बहुत ही बुनियादी काम है, लेकिन कोड #ifndef, #if, और #else पर अधिक उन्नत संरचनाओं के साथ झुका हुआ है। मामलों को और भी खराब बनाने के लिए, संरचनाएं तर्कसंगत रूप से अधिक जटिल हैं, और मुझे नहीं लगता कि मेरे विम स्क्रिप्टिंग कौशल मेरे लिए पर्याप्त हैं जो मुझे चाहिए। उदाहरण के लिए:

#if DLEVEL > 5 
    #define SIGNAL 1 
    #if STACKUSE == 1 
     #define STACK 200 
    #else 
     #define STACK 100 
    #endif 
#else 
    #define SIGNAL 0 
    #if STACKUSE == 1 
     #define STACK 100 
    #else 
     #define STACK 50 
    #endif 
#endif 
#if DLEVEL == 0 
    #define STACK 0 
#elif DLEVEL == 1 
    #define STACK 100 
#elif DLEVEL > 5 
    display(debugptr); 
#else 
    #define STACK 200 
#endif 

यदि मैं इससे निपटना चाहता हूं तो अभिव्यक्ति मूल्यांकनकर्ता को परिभाषित करना शामिल है। यह एक हल समस्या होनी चाहिए! यदि आपके पास विम सुझाव हैं या अन्य कृपया मुझे बताएं।

+1

एडी एक संपादक के रूप में चट्टानों! – ojblass

+0

#ojblass हम दोनों गुप्त आदेश का हिस्सा हैं ... –

उत्तर

15

ग्रहण CDT संपादक मैक्रोज़ पर आधारित एक बहुत अच्छी नौकरी हाइलाइटिंग कोड करता है जो आप सक्रिय होने की घोषणा करते हैं। इसे आज़माने की आपकी इच्छा हो सकती है। alt text

+0

अच्छा लिनक्स विषय! उसे क्या कहा जाता है? – Kredns

+0

मैं केडीई (कुबंटू) – lothar

+0

पर चल रहा हूं मुझे कुबंटू पसंद आया, लेकिन इसे अनइंस्टॉल करना पड़ा क्योंकि मेरा पीसी बेकार है और केवल 60 जीबी एचडीडी स्पेस है (जब आप विस्टा की गिनती करते हैं, 2 जीबी संगीत, 3 आईडीई, और कई अन्य बकवास मुझे शायद अनइंस्टॉल करना चाहिए)। – Kredns

6

एक संपादक के लिए, Eclipse CDT काफी अच्छी तरह से काम करता है। यह दिखाता है कि कौन सा कोड सक्रिय है और कौन सा कोड # ifdef'ed आउट है, यह कोड के भीतर सिंटैक्स हाइलाइटिंग प्रदान करता है जो # ifdef'ed आउट है ताकि आप इसे आसानी से पढ़ सकें, और यह माउस पर एक बार मैक्रो विस्तार के माध्यम से कदम उठा सकता है यदि आप माउस एक मैक्रो पर।

कमांड लाइन से, cpp -dM filename.c एक फ़ाइल को संसाधित करता है और केवल # परिभाषाओं को दिखाता है जो दिखाता है। उदाहरण के लिए, अपने कोड में, यह पता

#define DLEVEL 5 
#define SIGNAL 1 
#define STACK 200 
#define STACKUSE 1 

अन्य पूर्वप्रक्रमक निर्देशों के साथ या C/C++ कोड के साथ सूची को अव्यवस्थित किए बिना थूक सकता है।

(एक संबंधित नोट पर, cpp -dM /dev/null अपने मंच के लिए पूर्व-निर्धारित मैक्रो को खोजने के लिए एक आसान तरीका है।)

+1

+1! – Kredns

1

आप एक लिनक्स उपयोगकर्ता हैं, और आप भी सूक्ति का उपयोग तो मैं GEdit की सिफारिश करने के लिए होता है। Intellisense, फ़ाइल ब्राउज़िंग इत्यादि के लिए मैंने कुछ plugins स्थापित करने के बाद वास्तव में इसे प्यार किया ... यदि आप गनोम नहीं चला रहे हैं लेकिन अभी भी लिनक्स (केडीई) का उपयोग कर रहे हैं तो आप Kate का उपयोग करने में सक्षम हो सकते हैं। मैंने बहुत लंबे समय तक इसके साथ नहीं खेला, इसलिए मेरे पास इसके बारे में कुछ कहना नहीं है। जीईडीआईटी केडीई में काम करेगा लेकिन यह सही नहीं लगेगा।

यदि आप विंडोज का उपयोग कर रहे हैं और वास्तव में एक अच्छा पीसी है तो Netbeans (हाँ यह सी ++ के लिए भी है, सिर्फ जावा नहीं) का प्रयास करें। यदि हमेशा Visual C++ 2008 नहीं है (फिर भी सुंदर रैम निर्भर है)।

मैक के बारे में निश्चित नहीं हूं क्योंकि मैं एक परवाह नहीं कर सकता, लेकिन नेटबीन भी इसके साथ-साथ लिनक्स पर भी काम करता है।

2

Is there a C pre-processor which eliminates #ifdef blocks based on values defined/undefined? के उत्तर में उद्धृत "यूनिफडेफ का बेटा" देखने पर विचार करें। यह एक दृश्य संपादक नहीं है - हालांकि, यह सी कोड (या इसमें सी प्रीप्रोसेसर निर्देशों के साथ कोड) ले जाएगा और एक संशोधित फ़ाइल उत्पन्न करेगा जिसे आप मूल के साथ तुलना कर सकते हैं।

मैं इनफॉर्मिक्स 4 जीएल (आई 4 जीएल) के उल्लेख के बारे में उत्सुक हूं। सी कोड जो उत्पन्न करता है वह नहीं है, AFAIK, #ifdef संरचनाओं के साथ लगी हुई है।कम से कम, जब आउटपुट का प्रभारी था तब आउटपुट को किसी भी शामिल करने की अनुमति नहीं थी। (I4GL का कौन सा संस्करण आप उपयोग कर रहे हैं?) #line प्रविष्टियों में से बहुत सारे हैं; वे आपको उत्पन्न कोड को इसी I4GL स्रोत पर वापस लेने की अनुमति देते हैं। मेरे पास एक स्क्रिप्ट है जो उन्हें सरल सी टिप्पणियों में परिवर्तित करती है ताकि मैं एक डीबगर (gdb या dbx या ... विचार संकलित, sdb या adb) संकलित कोड पर उपयोग कर सकूं। और मैंने प्रीप्रोसेसरों को भी देखा है (cpp और m4) I4GL संकलक को सबमिट करने के लिए I4GL स्रोत कोड उत्पन्न करने के लिए उपयोग किया जाता है।

+0

हम सूचना संस्करण क्लाइंट एसडीके के संस्करण संस्करण 2.95 और संस्करण 3.5 का उपयोग कर रहे हैं; हालांकि, यह हमारे पर्यावरण के लिए अत्यधिक अनुकूलित है। – ojblass

+0

प्रीप्रोसेस्ड कोड कई अन्य कारणों के लिए अनैतिक है (यहां तक ​​कि रेखा संख्याओं के साथ)। कोड के मेरे छोटे ब्रह्मांड को देखकर पचाने में बहुत आसान है। जैसा कि मैं अधिक बारीकी से देखता हूं, यह सब हमारी खुद की क्रैपी हेडर फाइलों से आता है। – ojblass

+0

उनमें से कुछ कंपाइलर के संस्करणों के आधार पर सुविधाओं को सक्षम या अक्षम करते हैं क्योंकि हमें एक गैर वर्दी वातावरण का समर्थन करना है (यहां इंफॉर्मिक्स 7 इंजन, इनफॉर्मिक्स 9 इंजन, इन्फॉर्मिक्स 10 इंजन। कृपया मुझे मार दें। – ojblass

1

Emacs छिपाने-ifdef-मोड (मैं इसे अपने आप का उपयोग करने के लिए कभी नहीं किया है, इसलिए मैं इसकी गुणवत्ता की गारंटी नहीं दे सकता है)

0

तुम भी unifdef कोशिश कर सकते हैं जो बल्कि sunifdef से अधिक आसान है।

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