2010-02-19 10 views
8

मेरे पास कोड का एक टुकड़ा है जो x86 gcc 4.4.1 के साथ समस्याओं के बिना संकलित करता है लेकिन ब्लैकफिन जीसीसी 4.1.2 के साथ विफल रहता है जिसमें कई "अपेक्षित अयोग्यता-आईडी संख्यात्मक स्थिरता से पहले" त्रुटियों के साथ विफल होते हैं। मैं देखता हूं कि कुछ परिवर्तनीय नाम हैं जो कुछ पूर्वनिर्धारित मैक्रोज़ के साथ संघर्ष करते हैं। क्या सीपीपी फ़ाइल की एक निश्चित पंक्ति पर परिभाषित मैक्रोज़ देखना संभव है?क्या मैं सी कोड के संकलन के दौरान परिभाषित मैक्रोज़ देख सकता हूं?

उत्तर

11
gcc -dM -E myfile.cpp 
  • -dM स्विच जीसीसी बताता सभी मैक्रो दिया फाइल में परिभाषित डंप करने के लिए (यह भाषा मानक के साथ-साथ किसी भी अतिरिक्त मैक्रो जीसीसी खुद को परिभाषित करता है के द्वारा परिभाषित किया जाना आवश्यक मैक्रो की एक सूची में शामिल होंगे)।

  • -E स्विच जीसीसी को फ़ाइल को प्रीप्रोकैस करने के बाद संकलन जारी रखने के लिए नहीं कहता है।

आदेश में एक cpp फ़ाइल की दी गई लाइन पर परिभाषित मैक्रो की एक सूची देखने के लिए, यह पहली बार पूर्व-निर्धारित मैक्रो (मैक्रो संकलक द्वारा परिभाषित) के किसी भी बाहर फिल्टर करने के लिए आसान हो सकता है। मार में, आप कर सकता है:

LINE=40 
FILE=myfile.cpp 
HEADER=myfile.h 
diff <(grep -h '#include[[:space:]]*<.*>' ${FILE} ${HEADER} | gcc -dM -x c++ -E -) <(cat ${FILE} | head -n ${LINE} | gcc -x c++ -dM -E -) 

यह किसी मैक्रो मानक प्रणाली हेडर या चौखटे द्वारा परिभाषित बाहर फ़िल्टर करना चाहिए। अतिरिक्त भाग, -x c++, जीसीसी को सी ++ स्रोत के रूप में इनपुट की व्याख्या करने के लिए कहता है [जिसके लिए प्रीप्रोकैसिंग की आवश्यकता होती है], ऐसा इसलिए है क्योंकि यह फ़ाइल नाम के विस्तार के आधार पर इसे निर्धारित करने में सक्षम नहीं होगा (स्रोत कोड जीसीसी को सौंप दिया गया है stdin)।

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

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