में चेतावनी मैं एक समस्या जो मुझे यकीन है कि ठीक करने के लिए सरल है, लेकिन मैं एक नुकसान में हूँ हूँ ...फिक्सिंग "तुलना हमेशा गलत है ..." जीसीसी
आ रही है मैं एक टेम्पलेट है निम्नलिखित कोड करता है:
T value = d;
if (std::numeric_limits<T>::is_signed)
{
if (value < 0)
{
*this += _T("-");
value = -(signed)value;
}
}
अब के लिए, स्पष्ट कारणों, जीसीसी मुझे एक चेतावनी दे रहा है जब इस कोड को एक अहस्ताक्षरित प्रकार के लिए संकलित किया गया है (तुलना हमेशा डेटा प्रकार की सीमित रेंज की वजह से गलत है)। मैं इसके पीछे तर्क को पूरी तरह से समझता हूं और मैंने संख्यात्मक_लिमिट्स चेक में यह देखने के लिए जांच की है कि क्या मैं इसके बारे में बंद करने के लिए कंपाइलर प्राप्त कर सकता हूं (यह एमएसवीसी के लिए काम करता है)। जीसीसी के तहत मुझे चेतावनी मिलती है। क्या इस चेतावनी को ठीक करने के लिए कोई तरीका है (चेतावनी को अक्षम करने से कम जिसे मैं यह भी नहीं जानता कि आप जीसीसी के साथ क्या कर सकते हैं)? कोड को वैसे भी कभी नहीं बुलाया जाएगा और मुझे लगता है कि ऑप्टिमाइज़र इसे भी संकलित करेगा लेकिन मैं चेतावनी से छुटकारा नहीं पा सकता हूं।
क्या कोई मुझे इसका समाधान दे सकता है?
चीयर्स!
यह बहुत बुरा है जब 'int' 16 बिट्स है। जब 'मान' लंबा होता है, तो' value = - (हस्ताक्षरित/* int * /) मान 'बड़े मानों को छोटा करता है। इसके बजाय '-1' गुणा करें, और ऑप्टिमाइज़र इसे समझने दें। – MSalters