निम्न कोड डिबग मोड और रिलीज़ मोड (विज़ुअल स्टूडियो 2008 का उपयोग करके) के तहत विभिन्न परिणाम उत्पन्न करता है:
int _tmain(int argc, _TCHAR* argv[])
{
for( int i = 0; i < 17; i++ )
{
int result = i * 16;
if( result > 255 )
{
result = 255;
}
printf("i:%2d, result = %3d\n", i, result) ;
}
return 0;
}
डिबग मोड का आउटपुट, जो अपेक्षित है:
i: 0, result = 0
i: 1, result = 16
(...)
i:14, result = 224
i:15, result = 240
i:16, result = 255
रिलीज़ मोड का आउटपुट, जहाँ मैं: 15 परिणाम सही नहीं है:
i: 0, result = 0
i: 1, result = 16
(...)
i:14, result = 224
i:15, result = 255
i:16, result = 255
रिलीज़ मोड के तहत विज़ुअल स्टूडियो में "ऑप्टिमाइज़ेशन -> ऑप्टिमाइज़ेशन नहीं" चुनने से, आउटपुट परिणाम सही होगा। हालाँकि मैं जानना चाहूंगा कि ऑप्टिमाइज़ेशन प्रक्रिया गलत आउटपुट क्यों दे सकती है।
अपडेट करें:
जैसा कि मोहित जैनबी ने सुझाव दिया है:
printf("i:%2d, result = %3d, i*16=%d\n", i, result, i*16) ;
रिलीज़ मोड आउटपुट सही है:
i: 0, result = 0, i*16=0
i: 1, result = 16, i*16=16
(...)
i:14, result = 224, i*16=224
i:15, result = 240, i*16=240
i:16, result = 255, i*16=256
i * 16
पोस्ट के आउटपुट को अपडेट करता है , और परिणाम सही है।