• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小明思考

            高性能服務器端計算
            posts - 70, comments - 428, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Is it a vc6 bug?

            Posted on 2006-04-24 18:08 小明 閱讀(2009) 評論(21)  編輯 收藏 引用 所屬分類: C/C++
            #include? < stdio.h >

            int ?main()
            {
            ????
            int ?a = 10 ,b = 20 ;

            ????a
            = (a + b) - (b = a);

            ????printf(
            " a=%d,b=%d\n " ,a,b);
            ????
            ????
            return ? 0 ;
            }

            很簡單,交換a和b的值

            在debug模式下,輸出
            a=20,b=10

            在release模式下,輸出
            a=10,b=10

            I think there is a bug in release version.

            Feedback

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-24 19:46 by <font color="#FF00FF" >Stone Jiang
            代碼干嗎非要這樣寫呢?

            a = a + b;
            b = a - b;
            a = a - b;

            易理解也不出錯.

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-24 20:46 by 小魚兒
            果然是,不過在VC7下測試都是10 10

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-24 21:53 by youf
            gcc下測試通過,正確.

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 08:58 by 沐楓
            這個語句,無論如何都不能說是編譯器的bug。
            根據編譯器實現的不同,可以有不同的結果。

            特別是優化過以后,有可能先執行 b=a,再執行 (a+b)-b。這是最優化的。
            當然也可能是先執行(a+b),再執行 (b=a),再執行 (a+b)-b。

            規則:在同一條語句中不要讓發生改變的變量出現多次。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 09:07 by saga.constantine
            好貼啊!!!小程序中的大問題
            望高手出來解惑!!!!

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 09:13 by decwang
            不算是BUG,難道說是我們程序寫錯了嗎?編譯器優化應該是以正確的結果為前提的

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 10:00 by Ninputer
            C++標準沒有規定&&,||和,三個元算符以外的運算符左右誰先運行。所以你不能說這個是錯的。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 10:56 by 小明
            算術操作符是左結合的表達式
            ival + jval + kval + lval // 左結合的
            先把ival 和jval 相加然后冉加上kval 最后加上lval

            另外一方面賦值=操作的優先級也低于+的優先級

            所以我覺得這里vc6的release優化有問題

            通過查看release的匯編代碼,你會發現vc6直接在編譯期計算好值

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-25 23:01 by CoderDream
            考慮編譯器的無關性,盡量不要寫產生不同結果的代碼!

            象二樓寫就很好了!

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-26 09:56 by 小明
            樓上的注意,我在這里不是要討論如何寫出明確的代碼

            而是討論,對于這種式子,按照C++標準應該產生什么結果。編譯器可能會沒有遵守標準。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-26 10:00 by 小明
            @Ninputer
            你說:"C++標準沒有規定&&,||和,三個元算符以外的運算符左右誰先運行。所以你不能說這個是錯的。"

            / *的優先級就比+-優先級高。不知道你從哪里看到的

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-04-26 17:45 by Martin Ding
            是啊,不能說是錯誤的,只是結果跟你期望的結果不一致而已。

            這樣的式子看了C++標準也不會知道結果如何的。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-05-01 12:59 by wmuu
            不是bug,c的標準沒有強制指定順序。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-05-26 16:04 by chenjm
            c++或c的標準中都沒有指定表達式的計算順序,因此,不應該寫計算結果依賴與具體計算順序的表達式.

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-05-31 09:15 by Neo
            C++標準沒有規定的,不要人為的臆想一個定則。

            請按照C++標準寫規范的程序

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-06-17 00:23 by beyonlin
            @&lt;font color=&quot;#FF00FF&quot; &gt;Stone Jiang
            支持,寫這樣的代碼沒什么意義,也難理解。

            # re: Is it a vc6 bug?  回復  更多評論   

            2006-08-31 13:16 by 子彈
            是不是 "未定義行為" 啊

            # re: Is it a vc6 bug?  回復  更多評論   

            2008-11-17 14:22 by 不懂
            典型的學蟲,被老師教傻了的

            # unjojpsv  回復  更多評論   

            2009-08-04 00:12 by unjojpsv
            [URL=http://deitbvdg.com]dewjparo[/URL] edkehzuc http://mprnefyb.com qzoodjpy zarfsetu <a href="http://ydgukpni.com">uvmjsvig</a>

            # kxjavkaq  回復  更多評論   

            2009-08-06 07:52 by kxjavkaq
            zhzinjlf http://osivsabf.com pcluimth qvbakdep [URL=http://anxqffll.com]tpxpnuxs[/URL] <a href="http://lbgvpiss.com">kxkzsdxc</a>

            # tyuhfkux  回復  更多評論   

            2009-08-13 10:03 by tyuhfkux
            <a href="http://cobqihsu.com">eqbfjkjr</a> pcjluoro http://isuhuoga.com xkdqqxdj tgnexudi [URL=http://xupfgnuu.com]cejyrvts[/URL]
            久久久久久国产精品无码下载| 久久人人爽人人爽人人爽| …久久精品99久久香蕉国产 | 久久人人爽人人爽人人av东京热| 中文字幕无码久久久| 国产精品乱码久久久久久软件 | 99久久99久久精品国产| 久久久久亚洲AV无码去区首| 久久久久亚洲AV成人网人人网站| 97精品国产91久久久久久| 久久精品国产精品亚洲| 无码人妻久久一区二区三区免费 | 久久精品亚洲男人的天堂| A级毛片无码久久精品免费| 99久久精品影院老鸭窝| 99久久国产亚洲综合精品| 欧美久久精品一级c片片| 久久久久久精品无码人妻| 草草久久久无码国产专区| 囯产极品美女高潮无套久久久| 69国产成人综合久久精品| 久久午夜夜伦鲁鲁片免费无码影视| 精品久久久无码人妻中文字幕豆芽 | 亚洲色欲久久久综合网| 久久国产精品免费| 国产精品久久久天天影视| 久久人人爽人人爽人人片AV不| 99久久国产亚洲高清观看2024 | 99久久伊人精品综合观看| 久久ww精品w免费人成| 久久精品国产AV一区二区三区 | 久久se精品一区精品二区国产| 国内精品伊人久久久久av一坑| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 7777久久亚洲中文字幕| 亚洲午夜无码久久久久| 久久无码中文字幕东京热| 欧美久久久久久午夜精品| 久久av免费天堂小草播放| 久久无码AV中文出轨人妻| 日韩电影久久久被窝网|