• <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 - 16,  comments - 34,  trackbacks - 0

            一、依據(jù)

            C++標準規(guī)定:main函數(shù)可以省略返回語句,等效于返回0。

            5. A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument.
            If control reaches the end of main without encountering a return statement, the effect is that of executing
            return 0;

                            ——ISO C++03 3.6.1 Main function p44/72
                            ——ISO C++98 3.6.1 Main function p43/69

            注意:
            1. main函數(shù)的返回類型是int, 不是void或者其他類型。
            2. 該規(guī)則僅僅對main函數(shù)適用。
            3. 對其他函數(shù),如果省略返回值, 將得到一個警告
            4. 應(yīng)該避免3的情況。




            二、 示例

                    二、1. 一個合法的最小化的完整C++程序如下:
            int main() {}

                    二、2. 省略的確切含義

            同時,標準中的用語是很考究的:
            “當(dāng)控制到達main結(jié)束處時沒有遇到return語句,效果與返回0相同”。

            即是說,標準規(guī)定的是“對省略return的分支,認為返回0”。
            同時,標準也允許其他分支含有返回語句。
            如下:
            int main(int argc,char* []) {
                
            switch (argc)
                {
                
            case 1:
                    
            // error, should passing argument
                    return -1;
                    
            // parse arguments
                default:
                
            case 3// parser argv[2]
                case 2// parser argv[1]
                    ;
                }
                
            // do some work
                
            // control reaches here
            }

            沒有輸入命令行參數(shù)時, 返回一個錯誤。
            其他情況,當(dāng)控制達到main的結(jié)尾處時,效果同return 0;

                    二、3. 對于其他函數(shù),沒有這種“優(yōu)待”
            如:
            int not_main(int argc) {
                
            if (argc<=1)
                    
            return -1;
            }
            int main(int argc,char* []) {
                
            return not_main(argc);
            }

            not_main無疑將得到一個警告。
            程序在沒有輸入命令行參數(shù)時的返回值將無法預(yù)知



            三、驗證

                    三、1. ERRORLEVEL

            windows下,可以通過 %ERRORLEVEL% 查詢上一次程序返回值。

            結(jié)果與判斷相吻合:
            1. minimalist有確定的返回值0
            2. omit_return_in_main有確定的返回值-1或0
            3. 對omit_return_in_other
            3.1 有命令行參數(shù)時,返回值確定為0。
            3.2 無命令行參數(shù)時,返回值無法預(yù)知


                    三、2 匯編代碼

            更嚴謹?shù)尿炞C方法是查看匯編代碼。

            可以看到,在minimalist與omit_return_in_main的main函數(shù)中都有將eax置0的代碼。
            在omit_return_in_other中的not_main函數(shù)中,沒有這樣的代碼。




            四、 例外

            VC6在這點上與標準不符。

                    四、1. 對omit_return_in_main,它給出的警告:

            warning C4715: 'main' : not all control paths return a value

            說明它在這點上與標準不符。
            顯然,在有命令行參數(shù)的時候,程序結(jié)果無法預(yù)知


                    四、2. 對minimalist,它給出的警告很搞笑:

            warning C4508: 'main' : function should return a value; 'void' return type assumed

            暴露出它另一個與標準不符的地方——main返回void。
            顯然,任何情況下,程序結(jié)果都無法預(yù)知

                    四、3. 對omit_return_in_other,是程序員的錯誤。




            五、 實踐

            不知道為什么C++標準在這里開一個“后門”。
            ——C++在許多地方都是很嚴謹的。

            在實際應(yīng)用中,盡量不要采用這一特性, 因為:
            1. 舊編譯器不支持
            2. C不支持——如果希望main能同時按C語言編譯的話

            對于演示用的C++代碼,與主題無關(guān)的代碼行能省則省,則可以使用這一特性。
            比如:C++標準中的示例代碼幾乎都采用了這一特性。
            由此可得出,C++標準在這里開后門的原因是——讓C++標準更薄^_^



            相關(guān)鏈接:

            ——示例代碼
            http://immature.googlecode.com/svn/trunk/iMmature/sample/omit_return_in_main



            Creative Commons License
            作品采用知識共享署名-非商業(yè)性使用-相同方式共享 2.5 中國大陸許可協(xié)議進行許可。

            轉(zhuǎn)載請注明 :
            文章作者 - OwnWaterloo
            發(fā)表時間 - 2009年04月26日
            原文鏈接 - http://m.shnenglu.com/ownwaterloo/archive/2009/04/26/omit_return_in_main.html

            posted on 2009-04-26 14:37 OwnWaterloo 閱讀(3448) 評論(1)  編輯 收藏 引用

            FeedBack:
            # re: main函數(shù)中省略返回語句[未登錄]
            2013-04-14 23:22 | null

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2013年6月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(8)

            隨筆檔案(16)

            鏈接

            搜索

            •  

            積分與排名

            • 積分 - 197919
            • 排名 - 133

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲中文字幕伊人久久无码| 乱亲女H秽乱长久久久| 日本免费一区二区久久人人澡| 精品一区二区久久| 很黄很污的网站久久mimi色| 亚洲国产成人久久精品99 | 久久综合狠狠综合久久激情 | 人人狠狠综合久久亚洲88| 久久久青草青青国产亚洲免观| 久久久久久久波多野结衣高潮| 成人国内精品久久久久一区| 国产综合成人久久大片91| 精品久久久无码人妻中文字幕| 久久精品人人槡人妻人人玩AV | 久久99亚洲网美利坚合众国| 色综合合久久天天综合绕视看 | 97久久国产亚洲精品超碰热 | 精品久久久久久无码中文字幕 | 亚洲日本va午夜中文字幕久久| 久久精品国产网红主播| 亚洲国产天堂久久久久久| 日本精品久久久久中文字幕8 | 久久婷婷人人澡人人爽人人爱 | 久久精品久久久久观看99水蜜桃| 精品综合久久久久久97超人| 久久综合亚洲鲁鲁五月天| 久久久久亚洲爆乳少妇无| 国产精品女同一区二区久久| 久久99精品久久久久久久久久| 久久精品国产精品亚洲精品| 人人狠狠综合久久亚洲| 国产成人久久精品二区三区| 国产精品99久久久久久人| 久久人人爽人人爽人人片av高请| 久久精品综合网| 久久强奷乱码老熟女网站| 精品久久久久久无码不卡| 久久午夜无码鲁丝片午夜精品| 国内精品久久久久久不卡影院| A级毛片无码久久精品免费| 国产农村妇女毛片精品久久|