2011-09-13 11 views
5

मैं एक स्थिर विश्लेषण उपकरण के माध्यम से निम्नलिखित कोड खिलाया है:सी में कोष्ठक थोड़ा सा ऑपरेशन के परिणाम प्रकार के परिणाम प्रकार को बदल सकते हैं?

u1 = (u1^u2); // OK 

u1 = (u1^u2) & u3; // NOT OK 

u1 = (u1^u2) & 10; // NOT OK 

u1 = (u1^u2) & 10U; // NOT OK 

u1 = (unsigned char)(u1^u2) & 10U; // OK 

u1 = (unsigned char)(u1^u2) & u3; // OK 

"ठीक है" का मतलब है स्थिर विश्लेषण उपकरण शिकायत नहीं की थी। "ठीक नहीं" का मतलब है कि स्थिर विश्लेषण उपकरण ने शिकायत की है - दावा करते हुए कि थोड़ा सा ऑपरेशन का कुछ ऑपरेंड एक हस्ताक्षरित पूर्णांक नहीं है।

पिछले 2 लाइनों से परिणाम बताते हैं कि कोष्ठकों या तो उत्पन्न कर रहे हैं

एक। हस्ताक्षरित

बी पर वास्तविक प्रकार का रूपांतरण। कुछ ऐसा जो स्थिर विश्लेषण उपकरण सोचता है वह

पर एक प्रकार का रूपांतरण है, मैं स्थिर विश्लेषण टूल डेवलपर (बी) के बारे में पूछूंगा।

लेकिन इससे पहले कि मैं जानूं कि सी भाषा को (ए) करने के लिए जाना जाता है या नहीं?

उत्तर

6

कुछ भी नहीं int नीचे किया जाता है: उदाहरण के लिए, जब दो unsigned chars जोड़ने, यहां तक ​​कि इसके पहले, ऑपरेंड int करने के लिए डिफ़ॉल्ट प्रोन्नति के अनुसार बदल रहे हैं।

unsigned char u1, u2, u3; 
u1 = 0; 
u2 = 42; 
u3 = u1 + u2; 

अंतिम पंक्ति में, पहली u1 और u2int में बदल रही हैं, तो + ऑपरेटर एक int मूल्य प्राप्त करने के लिए लागू किया जाता है और फिर उस मूल्य के पाठ्यक्रम संकलक शॉर्टकट का उपयोग कर सकते हैं (unsigned char वापस करने के लिए बदल जाती है!)

+0

धन्यवाद @pmg! मैं प्रश्न शीर्षक में "कोष्ठक" शब्द छोड़ दूंगा क्योंकि, हालांकि अब मुझे पता है कि वे अप्रासंगिक हैं, अन्य लोग यह भी सोच सकते हैं कि वे समस्या का कारण बन रहे हैं, खोज कर सकते हैं और यह जवाब ढूंढ सकते हैं। अब मैं समझता हूं कि यह अच्छा जवाब "सी पूर्णांक पदोन्नति नियम सीखना" का एक विशेष मामला है। वहां बहुत से संदर्भ हैं (अब मुझे पता है कि क्या देखना है)। जैसे stackoverflow पर http://tinyurl.com/62fm8yl, और href = "http://www.lysator.liu.se/c/rat/c2.html#3-2" - "हस्ताक्षरित संरक्षण और मूल्य" की चर्चा संरक्षण "। – talkaboutquality

3

ऐसा इसलिए है क्योंकि, सी में,पर ऑपरेशन के परिणामस्वरूप प्रकार: int है। स्थैतिक विश्लेषण उपकरण सही ढंग से (हालांकि बहुत सहज नहीं है) रिपोर्ट करता है कि &int पर लागू होता है। सी में

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