首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在发布模式下,代码行为与预期不符

在发布模式下,代码行为与预期不符
EN

Stack Overflow用户
提问于 2015-07-09 13:41:21
回答 2查看 10.4K关注 0票数 132

以下代码在调试模式和发布模式下生成不同的结果(使用Visual Studio 2008):

代码语言:javascript
复制
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;
}

debug模式的输出,如预期所示:

代码语言:javascript
复制
i: 0, result =   0
i: 1, result =  16
(...)
i:14, result = 224
i:15, result = 240
i:16, result = 255

释放模式的输出,其中i:15结果不正确:

代码语言:javascript
复制
i: 0, result =   0
i: 1, result =  16
(...)
i:14, result = 224
i:15, result = 255
i:16, result = 255

在发布模式下,通过在Visual Studio中选择"Optimization -> Not optimize“,输出结果将是正确的。然而,我想知道为什么优化过程会导致错误的输出。

更新:

根据Mohit JainBy的建议,打印方式:

代码语言:javascript
复制
printf("i:%2d, result = %3d, i*16=%d\n", i, result, i*16) ;

释放模式输出正确:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31309034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档