2013-12-15 4 views
6

क्या जीसीसी को स्रोत कोड संकलित करना और __FILE__, __LINE__ इत्यादि जैसे मैक्रोज़ को अनदेखा करना संभव है, या उन्हें फिर से कहने के लिए फिर से परिभाषित करें - एक खाली स्ट्रिंग?जीसीसी मानक पूर्वनिर्धारित मैक्रोज़ को अनदेखा या पुन: परिभाषित करना

+2

वास्तव में एक बुरा विचार है, आप ऐसा क्यों चाहते हैं? बहुत सारे कोड (सिस्टम हेडर समेत) सही चीज़ करने के लिए इन पर निर्भर करेगा। यह सिर्फ परेशानी की तलाश में है। –

+1

आप ऐसा क्यों करना चाहते हैं? क्योंकि: 1. सी मानक उन्हें फिर से परिभाषित/अपरिभाषित करने पर रोक लगाता है। '__LINE__' को' 0' या '-1' के साथ बदलना अजीब लगेगा (यह एक पूर्णांक मान है और आपको' __FILE__' के लिए खाली स्ट्रिंग के विपरीत कुछ देना होगा) 3. उनका प्राथमिक उद्देश्य * डीबग में मदद करने के लिए * है (यदि आप उन्हें नहीं चाहते हैं, तो उन्हें पहले स्थान पर क्यों उपयोग करें?)। तो ऐसा लगता है कि अगर आप उन्हें नहीं चाहते हैं या उन्हें बेहतर रखना चाहते हैं तो अपना कोड दोबारा लिखना एकमात्र तरीका है! –

उत्तर

5

किसी भी मैक्रो के साथ के रूप में आप सिर्फ उपयोग कर सकते हैं:

#undef __LINE__ 
#undef __FILE__ 

और उसके बाद आप उन्हें फिर से परिभाषित कर सकते हैं।

gcc विकल्पों में मैक्रो नाम को परिभाषित करने के लिए आप मैक्रो नाम और -D macroname=definition को अपनाने के लिए -U macroname भी पास कर सकते हैं।

ध्यान दें कि, जैसा कि किसी अन्य उत्तर में इंगित किया गया है, __LINE__ या __FILE__ को अपरिभाषित या फिर से परिभाषित करने के लिए अपरिभाषित व्यवहार का आह्वान करता है।

+2

मुझे संदेह है कि यूबी को इतना उत्तेजित करता है। कृपया इस पर मेरा जवाब देखें। – alk

+0

@alk सहमत हैं, यह करता है। – ouah

+1

@alk लेकिन मुझे लगता है कि प्रासंगिक उद्धरण यह है: * (c99, 6.10.8p4) "इनमें से कोई भी मैक्रो नाम नहीं, और न ही पहचानकर्ता परिभाषित किया गया है, # परिभाषा या #undef प्रीप्रोकैसिंग निर्देश का विषय होगा। * – ouah

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