다음 코드는 디버그 모드와 릴리스 모드 (Visual Studio 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
i : 15 결과가 올바르지 않은 릴리스 모드의 출력 :
i: 0, result = 0
i: 1, result = 16
(...)
i:14, result = 224
i:15, result = 255
i:16, result = 255
릴리스 모드에서 Visual Studio에서 "최적화-> 최적화하지 않음"을 선택하면 출력 결과가 정확합니다. 그러나 최적화 프로세스가 잘못된 결과를 초래할 수있는 이유를 알고 싶습니다.
최신 정보:
Mohit JainBy가 제안한대로 다음과 같이 인쇄합니다.
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
게시물 의 출력 만 업데이트하면 결과가 정확합니다.