নিম্নলিখিত কোডটি ডিবাগ মোড এবং রিলিজ মোডের অধীনে (ভিজ্যুয়াল স্টুডিও ২০০৮ ব্যবহার করে) বিভিন্ন ফলাফল উত্পন্ন করে:
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
পোস্টে আউটপুট আপডেট করে এবং ফলাফলটি সঠিক।