2010-12-14 9 views
7

मैं के माध्यम से सी कोड #ifdef, #if और #endif निर्देश जो कुछ हिस्से को सक्रिय रखने और कुछ हिस्से कुछ चर पर निर्भर करता है निष्क्रिय परिभाषित या नहीं कर रहे हैं की बहुत होने जाने के लिए उपयोग करते हैं। मैंने कुछ ऐसी खोज की जो उन्हें अंतिम सी कोड उत्पन्न करने के लिए संसाधित कर सके। लेकिन preprocessing भी #include और #define के लिए भी ऐसा ही करता है। लेकिन मैं उन्हें रखना चाहता हूं।कुछ निर्देशों का संसाधन अन्य को

तो, क्या कुछ फाइलिंग के साथ इन फ़ाइलों या प्रोजेक्ट को प्रीप्रोसेस करने की कोई बात है?

उत्तर

0

मुझे लगता है कि आप जीसीसी का उपयोग कर रहे हैं।

आप सभी #include रों मतलब है, मैं आप उन्हें दूर करने के लिए, gcc -E साथ परिणामी फ़ाइल का विस्तार तो #includes रों वापस जोड़ने की जरूरत है।

आप केवल मानक हेडर मतलब है, तो विकल्प -nostdinc मदद मिल सकती है आप क्या चाहते हैं

[email protected]:~/test/tmp$ cat 4437465.c 
#include <stdio.h> 

#ifndef OUTPUT_TYPE 
#define OUTPUT_TYPE 1 
#endif 

int main(void) { 
#if OUTPUT_TYPE == 1 
    printf("output type 1\n"); 
#elif OUTPUT_TYPE == 2 
    printf("output type 2\n"); 
#else 
    printf("default output type\n"); 
#endif 
    return 0; 
}
[email protected]:~/test/tmp$ gcc -DOUTPUT_TYPE=2 -nostdinc -E 4437465.c 
# 1 "4437465.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "4437465.c" 
4437465.c:1:19: error: no include path in which to search for stdio.h 






int main(void) { 



    printf("output type 2\n"); 



    return 0; 
}
0

क्या आप वास्तव में एक बुरा विचार हो सकता है, के रूप में वहाँ आ परिभाषाएँ शामिल से हो सकता है चाहता हूँ फाइलें, आपके आर्किटेक्चर का वर्णन, उदाहरण के लिए ... लेकिन कोई भी आधुनिक आईडीई #if प्रीप्रोसेसर निर्देशों को कल्पना कर सकता है।

+0

यह मेरी प्रारंभिक सोचा भी नहीं था। लेकिन आप भी शामिल फ़ाइलों को संसाधित कर सकते हैं और परिभाषित करने के लिए उन्हें स्कैन कर सकते हैं। –

0

हमने आपके द्वारा किए जाने वाले कार्यों को प्राप्त करने के लिए एक कस्टम पार्सर का उपयोग किया था। Lex & YACC ऐसे टूल के लिए एक अच्छी शुरुआत होगी।

एक तरफ ध्यान दें, यह एक बड़े कोड बेस में द्विआधारी के विभिन्न संस्करणों को प्रबंधित करने का एक बहुत ही दर्दनाक तरीका था। यदि यह संभव है, तो अलग-अलग पुस्तकालयों में अपने वैकल्पिक कोड भागों को अलग करने का प्रयास करें जो आपके अंतिम वितरण में गतिशील या स्थैतिक पुस्तकालय के रूप में शामिल नहीं हो सकते हैं या नहीं।

+0

यदि आप उस कस्टम पार्सर को साझा कर सकते हैं तो यह बहुत अच्छा होगा! – kumar

+0

@ कुमार: दुख की बात नहीं, मेरे पास इसका कोई अधिकार नहीं है :( – Matthieu

2

वहाँ कार्यक्रमों ऐसा कर सकते हैं की एक श्रृंखला है कि:

  • unifdef - सबसे पुराना
  • sunifdef (Unifdef का पुत्र)
  • (sunifdef का पुत्र)

मैं कुछ बहुत ही अलग कोड पर बड़े पैमाने पर सूरजमुखी का उपयोग किया है और इसे कभी गलती करने के लिए कभी नहीं मिला है। मैं अब कोन का उपयोग शुरू करने के लिए तैयार हूं, हालांकि यह अभी भी थोड़ी देर के लिए जांच के अधीन होगा। संस्करण 4.2.2 आज 2010-12-20 जारी किया गया था।

यह भी देखें: SO 525283

+1

गलत परियोजना के लिए कोन पॉइंट्स के लिए आपका लिंक http://coan2.sourceforge.net/ या http://sourceforge.net/ होना चाहिए परियोजनाओं/coan2/ – Hasturkun

+0

@ हत्सुर्कन: ओह - वह लापरवाह था - सिर के लिए धन्यवाद। –

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