2010-10-12 15 views
8

संभव डुप्लिकेट:
Running the GCC preprocessorजीसीसी पूर्वप्रक्रमक

वहाँ जीसीसी पूर्वप्रक्रमक सी स्रोत कोड उत्पन्न लेकिन अप्रासंगिक स्रोत कोड को फ़िल्टर करने के लिए एक GCC विकल्प है?

उदाहरण के लिए, सी फ़ाइल में #define switch कई अलग-अलग प्लेटफ़ॉर्म के लिए परिभाषित करने के लिए है। मैं केवल एक मंच में अंतरित हूं, इसलिए मैं सी प्रीप्रोसेसर को असंबद्ध कोड फ़िल्टर करने के लिए चाहता हूं। क्या जीसीसी इसका समर्थन करता है?

+2

सटीक डुप्लिकेट (जैसा कि पहले उपयोगकर्ता जैसा दिखता है): [gcc preprocessor] (http://stackoverflow.com/questions/3916979/gcc-preprocessor) –

+0

@Paul वास्तव में वही उपयोगकर्ता है; माइकल को साफ करने से पहले इस प्रश्न का मूल संस्करण शब्द-शब्द-शब्द समान था, जिसमें * रिचर्ड लुओ * सिग भी शामिल था। – meagar

उत्तर

2

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

#ifdef __GNUC__ 
#define SOME_VALUE 12 
#else 
#define SOME_VALUE 14 
#endif 

आप जीसीसी के साथ कि ब्लॉक संकलन हैं, तो SOME_VALUE12 हो जाएगा, और यदि आप MSVC के साथ संकलन, उदाहरण के लिए, SOME_VALUE 14. मंच विशिष्ट परिभाषा की सूची उपलब्ध है this question पर किया जाएगा।

18

केवल प्रीप्रोसेसर भाग चलाने के लिए gcc -E का उपयोग करें, उदा। एक फ़ाइल in.c

#if 0 
0; 
#endif 

#if 1 
1; 
#endif 

$ gcc -E in.c -o in.i 

चल देना एक फ़ाइल in.i

# 1 "in.cpp" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "in.cpp" 





1; 

अर्थात #if 0 पीछे भागों को हटा दिया गया अर्जित करता है। यदि आपके पास #include 'डी फाइलें होंगी तो उन्हें भी चिपकाया जाएगा, इसलिए मुझे यकीन नहीं है कि यह कितनी मददगार है।

+0

उत्तर के लिए धन्यवाद। शायद मेरा सवाल पर्याप्त स्पष्ट नहीं है। लेकिन honk मेरे सवाल का जवाब दिया। – richard

5

ऐसा लगता है कि आप वास्तव में unifdef चाहते हैं, जीसीसी प्रीप्रोसेसर नहीं।

0

आप शायद का उपयोग कर सकते हैं:

gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E 

switch साथ #define तुम जानते हो अपरिभाषित कर दिया जाएगा।

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