मैं एक प्रदर्शन संवेदनशील CUDA कोड है, जो मैंकैसे Emacs ठीक से संभाल सी प्रीप्रोसेसर सशर्त,
#ifdef DEBUG_<NAME_OF_SECTION>
...
#else
...
#endif
... सशर्त उपयोग कर रहा हूँ गति-गंभीर डिबगिंग कोड है, जो अतिरिक्त जानकारी पकड़ लेता है बंद संपुटित करने के लिए है जीपीयू
सब कुछ Emacs (Centos 6.0) ऊपर #else
तक में अच्छी तरह से चला जाता है।
(1 टैब से) यह deindents पूर्वप्रक्रमक सशर्त के बाकी खंड के अंदर का पाठ और बाद में सब कुछ deindent जारी है।
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ नोट: )
पूर्वप्रक्रमक सशर्त, अंदर प्रतिकृति हो रहा है सी-मोड द्वारा ठीक से संभाला गया। लेकिन );
डुप्लिकेशंस चीजों को तोड़ता है, जिससे आप सशर्त के बाहर );
स्थानांतरित कर सकते हैं ... ओह प्रिय कितना असंगत है। मैं इस प्रश्न को तब तक खुला रख रहा हूं जब तक कि हम इस असंगतता को ठीक करने के लिए उचित elisp कोड प्राप्त न करें। ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ वर्तमान जवाब पर
नोट:
Jens प्रदान की गई है सशर्त के अंदर नेस्टेड )
इंडेंटिंग का दावा करने में गलत जानकारी "असंभव" है। यह केवल संभव नहीं है, लेकिन Emacs 'C-Mode सक्रिय रूप से ऐसा करता है। इस सबूत के लिए इस प्रश्न पोस्ट के अंत में उदाहरण सी प्रोग्राम के उचित इंडेंटेशन पर ध्यान दें। तो यह कारण है कि );
भी इंडेंट करने के लिए संभव है, हालांकि सावधानी Jens द्वारा उल्लिखित कारणों के लिए प्रयोग किया जाना चाहिए खड़े हैं।
किसी भी तरह, मैं यह सुनिश्चित करना चाहता हूं कि लोग देखें कि कथन गलत है, इसलिए उन्हें नहीं लगता कि यह प्रश्न असंभव है। मैं इस टिप्पणी और जेन्स 'पोस्ट पर मेरी downvote जब वह अपने गलत बयान हरजाना प्रतिबिंबित करने के लिए है कि यह संभव है, )
के बहुत मामले वह रूपरेखा के लिए C-मोड में कार्यान्वित किया जाता है निकल जाएगी, लेकिन अनुशंसित नहीं है।
वर्तमान में मैं चीजों को मैन्युअल रूप से एक टैब को आगे बढ़ाने का प्रयास कर रहा हूं, लेकिन यह बहुत समय बर्बाद कर रहा है (कोड लंबा है)।
किसी भी विचार क्या मैं इसे ठीक करने के लिए अपने ~/.emacs फाइल करने के लिए जोड़ सकते हैं ???
अग्रिम धन्यवाद!
संपादित करें 1 मुझे यह उल्लेख करना चाहिए कि जिस क्लॉज पर लग रहा है वह एक कार्य बंद है, उदाहरण के लिए
MyFunc<<<Blk,Thr>>>(Stuff1,
#ifdef DEBUG_FUNC1
Stuff2,
dev_Debug);
#else
Stuff2); //Deindents here.
#endif
//Everything here on out is deindented.
यह कोड संरचना उस तरह पर एक विशिष्ट विफलता हो सकता है ...
संपादित 2 यहाँ एक बस सी कोड संस्करण है ... कोड अपेक्षित ढंग से काम करता है, लेकिन नहीं deindent पिछले #else
खंड ...
#include <stdio.h>
//#define DEBUG
void printer
(int A,
#ifdef DEBUG
int B,
int C)
#else
int B)
#endif
{
#ifdef DEBUG
printf("A: %i, B: %i, C: %i\n", A, B, C);
#else
printf("A: %i, B: %i\n", A, B);
#endif
}
int main()
{
int A = -3;
int B = 1;
int C = 3;
printer(A,
#ifdef DEBUG
B,
C);
#else
B);
#endif
return 0;
}
पर ... कि मैं क्या कर रहा हूं की तर्ज पर है।मुझे पता है कि यह सी में वाक्य रचनात्मक रूप से काम करता है (या कम से कम मुझे लगता है ... यह सही परिणाम देता है), हालांकि Emacs को उस कॉल कॉल के अंदर #else क्लॉज पसंद नहीं है ....
यदि आप '# ifdef' और' # else' के बीच कोड में खोलने और बंद करने वाले ब्रेसिज़ ('{}') की संख्या की गणना करते हैं, तो क्या वे सभी मेल खाते हैं? –
उदाहरण देखें ... प्रीप्रोसेसर सेक्शन में कोई '{}' नहीं है ... ऐसा लगता है कि फ़ंक्शन कॉल के भीतर प्रीप्रोसेसर का उपयोग करना मेरे जैसा नहीं है। एक गैर-सीयूडीए उदाहरण पोस्ट करें ताकि मैं दिखा सकूं कि मेरा क्या मतलब है ... –
प्रत्येक शाखा में अधिक डालने पर विचार करें (उदा। यदि डुप्लिकेट परिभाषा आवश्यक हो)। मुझे संदेह है कि यह पहले पथ में ")" के कारण है। –