हम MISRA C++ अनुरूपता के लिए QA-C का उपयोग कर रहे हैं, लेकिन उपकरण इस तरह के कोड के लिए एक त्रुटि उत्पन्न करता है:

float a = foo();
float b = bar();
float c = a - b;

जहां तक ​​​​मैं समझता हूं, इसका कोई अंतर्निहित प्रकार का प्रचार नहीं है क्योंकि सब कुछ float -साइज्ड विखंडू में होगा, लेकिन उपकरण मुझे बताता है कि घटाव एक का कारण बनता है। क्या ऐसी कोई स्थिति है जहां निहित पदोन्नति हो सकती है?

10
Ken Y-N 26 अप्रैल 2019, 10:45

1 उत्तर

सबसे बढ़िया उत्तर

यहां कोई निहित प्रचार शामिल नहीं है।

जब बाइनरी ऑपरेटरों से जुड़े रूपांतरण शामिल होते हैं, तो उन्हें सामान्य अंकगणितीय रूपांतरण कहा जाता है।

C++ मानक से, [expr]/11:

11 कई बाइनरी ऑपरेटर जो अंकगणित या एन्यूमरेशन प्रकार के ऑपरेंड की अपेक्षा करते हैं, रूपांतरण और उपज का कारण बनते हैं इसी तरह परिणाम प्रकार। उद्देश्य एक सामान्य प्रकार उत्पन्न करना है, जो परिणाम का प्रकार भी है। इस पैटर्न को सामान्य अंकगणितीय रूपांतरण कहा जाता है, जिन्हें इस प्रकार परिभाषित किया गया है:
...
(11.4) — अन्यथा, यदि कोई ऑपरेंड float, दूसरे को float में बदल दिया जाएगा।

चूंकि आपके उदाहरण में दोनों ऑपरेंड float हैं, इसलिए ऐसा कोई रूपांतरण या प्रचार नहीं है।
तो यह उपकरण से गलत सकारात्मक हो सकता है।

15
P.W 26 अप्रैल 2019, 08:01