[C++] En mode de publication, le comportement du code n'est pas celui attendu


Answers

En supposant que vos faits rapportés sont corrects, ce serait un bug de compilateur. Vérifiez la dernière version du compilateur. Si le bug est toujours présent, soumettez un rapport de bug.

Question

Le code suivant génère des résultats différents en mode débogage et en mode de publication (à l'aide de 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;
}

La sortie du mode débogage, qui est comme prévu:

i: 0, result =   0
i: 1, result =  16
(...)
i:14, result = 224
i:15, result = 240
i:16, result = 255

La sortie du mode release, où i: 15 résultat n'est pas correct:

i: 0, result =   0
i: 1, result =  16
(...)
i:14, result = 224
i:15, result = 255
i:16, result = 255

En choisissant "Optimisation -> Ne pas optimiser" dans Visual Studio en mode de validation, le résultat de sortie sera correct. Cependant, je voudrais savoir pourquoi le processus d'optimisation pourrait conduire à une sortie erronée.

Mettre à jour:

Comme suggéré par Mohit JainBy, estampes par:

printf("i:%2d, result = %3d, i*16=%d\n", i, result, i*16) ;

La sortie du mode de libération est correcte:

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