2017-04-13 9 views
6

अगर मैं gcc -C -x c -E test.def साथ निम्नलिखित test.def इनपुट फ़ाइल पर कार्रवाई:सी-प्रीप्रोसेसर आउटपुट के शीर्ष पर परिभाषाओं (लाइन मार्कर) को छोड़ने का कोई तरीका है?

#define TEST foo 
int TEST; 

मैं चाहूँगा उत्पादन सिर्फ होने के लिए:

int foo; 

इसके बजाय मैं:

# 1 "test.def" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "test.def" 

int foo; 

क्या कोई जिस तरह से मैं शीर्ष पर उन अतिरिक्त लाइनों को छोड़ सकता हूं?

+1

यह 'पूंछ -5' के लिए नौकरी की तरह लगता है। – unwind

+0

'gcc-c -x c -E test.def आज़माएं। पूंछ-एन + 4' लेकिन क्यों? –

+0

@ एनएम। मैं एक्स-मैक्रोज़ पर काम कर रहा हूं (मेरे हालिया प्रश्न/उत्तर देखें), और मैं अपने आईडीई (ग्रहण) और मेरे सहयोगियों को आसानी से प्रीप्रोसेस्ड फाइलें उत्पन्न करना चाहता हूं :) डेटा संरचनाओं को समझना। – Antonio

उत्तर

7

ये केवल शीर्ष पर नहीं हैं - बल्कि इसके बजाय वे लाइन मार्कर हैं कि सी प्रीप्रोसेसर स्रोत कोड स्थितियों को व्यक्त करने के लिए उपयोग करते हैं जहां कुछ रेखाएं सी संकलक से आती हैं।


जीसीसी के साथ यह आसान है, के रूप में GCC supports the -P switch, और so does llvm Clang:

-P। प्रीप्रोसेसर से आउटपुट में लाइनमार्कर्स की पीढ़ी को रोकें। सी कोड नहीं होने पर प्रीप्रोसेसर चलाने पर यह उपयोगी हो सकता है, और एक प्रोग्राम को भेजा जाएगा जो लाइनमार्कर्स द्वारा भ्रमित हो सकता है।

इस प्रकार, gcc -E -P -x c का उपयोग करें।

इसके अलावा, मैं -C (टिप्पणियां बरकरार रखता हूं) का उपयोग नहीं करता, क्योंकि ऐसा लगता है कि gcc इसके साथ निहित हेडर फ़ाइलों से कुछ टिप्पणियां जोड़ता है।

+0

बढ़िया! एक दोष यह है कि जाहिर है कि यह नई लाइनों को भी हटा देता है (कम से कम, जब मैंने जोड़ा- पी) – Antonio

+0

@ एंटोनियो आह, ऐसा लगता है, लेकिन यह शायद ही कोई फर्क नहीं पड़ता, अब यह होगा? यह अभी भी वैध स्रोत है। –

+0

यह थोड़ा सा मायने रखता है क्योंकि मैं "मानव पठनीय" कोड बनाने के लिए इस चाल का उपयोग कर रहा हूं। लेकिन मैंने बाद में '__CR__' को एक नई लाइन के साथ (' sed 'या कुछ समान) पर प्रतिस्थापित करने के लिए वैसे भी जोड़ा था और बेहतर स्वरूपण के लिए कुछ रिक्त स्थान (जैसे संरचना को परिभाषित करते समय), इसलिए' __SPACER__ 'जीता' एक समस्या नहीं है – Antonio

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

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