का उपयोग करते समय मैं चेतावनी स्तर/W4 सक्षम के साथ विजुअल स्टूडियो 2010 सी ++ कंपाइलर (X86) का उपयोग कर निम्न C++ प्रोग्राम को संकलित करने का प्रयास करता हूं, मुझे एक हस्ताक्षरित/हस्ताक्षरित मेलसमैच चेतावनी मिलती है चिह्नित रेखा।सी ++: साइन किए गए/हस्ताक्षरित मेल नहीं खाते जब केवल हस्ताक्षर किए गए प्रकार
#include <cstdio>
#include <cstdint>
#include <cstddef>
int main(int argc, char **argv)
{
size_t idx = 42;
uint8_t bytesCount = 20;
// warning C4389: '==' : signed/unsigned mismatch
if (bytesCount + 1 == idx)
{
printf("Hello World\n");
}
// no warning
if (bytesCount == idx)
{
printf("Hello World\n");
}
}
यह मुझे भ्रमित करता है, क्योंकि मैं केवल हस्ताक्षरित प्रकारों का उपयोग कर रहा हूं। तुलना
bytesCount == idx
ऐसी कोई चेतावनी का कारण बनता है के बाद से, यह शायद कुछ अजीब अंतर्निहित बातचीत कि यहां होता से कोई लेना देना नहीं है।
इस प्रकार: मुझे यह चेतावनी क्यों मिलती है और यह वार्तालाप किस नियम से होता है (यदि यह कारण है)?
और संकलक को इस तरह की समस्या के बारे में चेतावनी देने के लिए कैसे कहें, अगर यह प्रोग्राम कोड से स्पष्ट है कि तुलना सुरक्षित है, लेकिन मैं पूरी फ़ाइल के लिए चेतावनियां अक्षम नहीं करना चाहता, और मैं कोड बदसूरत नहीं करना चाहता इससे बचने के लिए। क्या इसे प्राप्त करने के किसी भी तरीके मौजूद हैं? – Arkady
@Arkady यदि संकलक कोड के लिए चेतावनी देने के लिए कॉन्फ़िगर किया गया है, तो आप कोड को बदलना नहीं चाहते हैं (क्योंकि यह उलझन में होगा), और आप कंपाइलर की कॉन्फ़िगरेशन को बदलना नहीं चाहते हैं (क्योंकि यह उपयोगी दबाएगा चेतावनियां भी), आप बहुत सारे विकल्प नहीं खोल रहे हैं। एकमात्र विकल्प मैं सोच सकता हूं कि आपने अभी तक इनकार नहीं किया है, इसके विश्लेषण में सुधार करने के लिए कंपाइलर पर हैकिंग है। – hvd