999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

如何優化C++程序代碼編寫

2012-04-29 05:32:13郭妍
考試周刊 2012年23期
關鍵詞:定義程序標準

郭妍

C和C++可以說是所有編程語言中關系最為緊密的兩個。在目標上,C++被定位為“a better C”;在名稱上,C++有一個別名叫做“C with classes”;在語法上,C更是C++的一個子集,C++幾乎支持C語言的全部功能。如何優化C++程序代碼,在多年的教學經驗中,我認為有一種方法,即不要讓main函數返回void。

同C程序一樣,每個C++程序都包含一個或多個函數,而且必須有一個函數命名為main,并且每個函數都由具有一定功能的語句序列組成。操作系統將main作為程序入口,調用main函數執行程序;main函數執行其語句序列,并返回一個值給操作系統。在大多數系統中,main函數的返回值用于說明程序的退出狀態。如果返回0,則代表main函數成功執行完畢,程序正常退出,否則代表程序異常退出。

然而在編寫C++程序入口函數main的時候,很多程序員,特別是一些具有C基礎的C++程序員時經常會寫出如下格式的main函數:

1.void main()

2.{

3.// some code... }

上述代碼在VC++中是可以正確編譯、鏈接、執行的。編譯信息如下所示:

1. 1>------ 已啟動生成: 項目: MainCpp, 配置: Debug Win32 ------

2. 1>main.cpp

3. 1>MainCpp.vcxproj -> G:\MainCpp\Debug\MainCpp.exe

========== 生成: 成功1 個,失敗 0 個,最新 0 個,跳過 0 個==========

但是當你將代碼放在Linux環境下,采用GCC編譯器進行編譯時,你會吃驚地發現編譯器拋出了如下錯誤信息:

1.[develop@localhost ~]g++ main.cpp

main.cpp:2: 錯誤 :′::main′必須返回′int′

為什么同樣的代碼會出現兩種不同的結果呢?這還是跨平臺的C/C++語言嗎?不要對C/C++的跨平臺性產生質疑,之所以會這樣,在很大程度上要歸咎于市面上一些書的“誤導”,以及微軟對VC++編譯器main返回值問題的縱容。 在C和C++中,不接收任何參數也不返回任何信息的函數原型為“void f(void);”,所以很多人認為,不需要程序返回值時可以把main函數定義成void main(void),然而這種想法是非常錯誤的。有一點必須明確:C/C++標準從來沒有定義過void main()這樣的代碼形式。C++之父 Bjarne Stroustrup 在他的主頁FAQ 中明確地寫著這樣一句話:“在C++中絕對沒有出現過void main(){/* ... */}這樣的函數定義,在C語言中也是。”

main函數的返回值應該定義為int類型,在C和C++標準中都是這樣規定的。在C99標準中規定,只有以下兩種定義方式是正確的:

1.int main( void )

2. int main( int argc, char *argv[] )

在C++03中也給出了如下兩種main函數的定義方式:

1.int main()

2.int main( int argc, char *argv[] )

雖然C和C++標準并不支持void main(),但在部分編譯器中void main()依舊是可以通過編譯并執行的,比如微軟的VC++。由于微軟產品的市場占有率與影響力很大,因此在某種程度上加劇了這種不良習慣的蔓延。不過,并非所有的編譯器都支持void main(),gcc就站在了VC++的對立面,它是這一不良習氣的堅定抵制者,它會在編譯時就明確地給出一個錯誤。

如果你堅持在某些編譯器中使用void main()這種非標準形式的代碼,那么當你把程序從一個編譯器移植到另一個編譯器時,你就要對可能出現的錯誤負責。除了有void main()這樣的不規范格式外,在C語言程序中,尤其是一些老版本的C代碼中,你還會經常看到main()這樣的代碼形式。

一些老的C標準(諸如C90)是支持main()這樣的形式的。之所以支持,是因為在第一版的C語言中只有int一種數據類型,并不存在char、long、float、double等這些內置數據類型。既然只有int一種類型,也就不必顯式地為main函數標明返回類型了。在Brian W.Kernighan和Dennis M.Ritchie的經典巨著The C Programming Language,Second Edition中用的就是main()。后來,在C語言的改進版中數據類型得到了擴充,為了能兼容以前的代碼,標準委員會就做出了如下規定:不明確標明返回值的,默認返回值為int。在C99標準中,則要求編譯器對于main()這種用法至少要拋出一個警告。

main函數返回值的作用,可以采用下面的方法加以驗證。

首先,編寫main.cpp文件,文件內容如下所示:

1.int main()

2.{

3. return 0;

4.}

在Linux環境下,采用命令:g++ main.cpp

生成可執行文件a.out。然后,執行命令:./a.out && ehco “success”

結果輸出success。

修改上述程序:

1.int main( )

2.{

3.return -1;

4.}

做同樣測試,無輸出。

命令A && B中的&&類似于C++中的并操作(&&),如果A命令正確執行,接著就會執行命令B;如果A出現異常,則B不執行。通過以上分析可知,當main()返回0時,a.out正確執行并返回;但是如果返回-1,程序就不能正常返回了。

最后,還要說明C++標準中一個“好壞難定”的規定:在main函數中,return語句的作用在于離開main函數(析構掉所有具有動態生存時間的對象),并將其返回值作為參數調用exit函數。如果函數執行到結尾而沒有遇到return語句,則其效果等同于執行了return 0。

也就是說,如果函數執行到main結束處時沒有遇到return語句,編譯器就會隱式地為你加上return 0;,效果與返回0相同。之所以說這條規定“好壞難定”,一方面是因為它讓你省去了多敲幾個字的麻煩,另一方面是因為這種便捷會讓某些程序員忽視編譯器代替他做的工作,而在思維中形成一種錯誤的認識:此函數可以無返回。

在應用這一規則時,需要注意以下兩點:

(1)main函數的返回類型是int,不是void或其他類型。

(2)該規則僅僅對main函數適用。

按照以上標準得到了一個完全合乎C/C++標準的最小化的完整C++程int main(){} 要想保證程序具有良好的可移植性能,就要標明main函數返回int,而不是void。

猜你喜歡
定義程序標準
2022 年3 月實施的工程建設標準
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
忠誠的標準
當代陜西(2019年8期)2019-05-09 02:22:48
美還是丑?
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
一家之言:新標準將解決快遞業“成長中的煩惱”
專用汽車(2016年4期)2016-03-01 04:13:43
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国产毛片高清一级国语| 久久综合伊人77777| 99精品高清在线播放| 手机精品福利在线观看| AV网站中文| www.亚洲色图.com| 日韩精品一区二区三区免费| 婷婷中文在线| 国产菊爆视频在线观看| 国产成年女人特黄特色毛片免| 亚洲欧美国产五月天综合| 日韩高清中文字幕| 国产亚洲美日韩AV中文字幕无码成人| 免费无码网站| 玖玖精品在线| 久草网视频在线| 亚洲va视频| 思思热精品在线8| 日韩av高清无码一区二区三区| 久久免费精品琪琪| 国产精品尹人在线观看| 精品午夜国产福利观看| 欧美日在线观看| 国产99精品视频| 毛片卡一卡二| 婷婷久久综合九色综合88| 亚洲香蕉伊综合在人在线| 精品1区2区3区| 国产午夜福利亚洲第一| 精品少妇人妻一区二区| 91在线精品麻豆欧美在线| 国产精品一区在线麻豆| 久久精品无码国产一区二区三区| 9966国产精品视频| 国产va欧美va在线观看| 国产午夜精品一区二区三区软件| av在线人妻熟妇| 性色一区| 青青国产在线| 久久精品女人天堂aaa| 91偷拍一区| 色综合a怡红院怡红院首页| 综合成人国产| 香蕉视频在线精品| 亚洲男人天堂久久| 亚洲日本韩在线观看| 国产成人无码AV在线播放动漫| 久久国产香蕉| 午夜精品福利影院| 国产精品男人的天堂| 国产在线视频自拍| 亚洲日本中文字幕天堂网| 在线色国产| 色婷婷天天综合在线| 国产亚洲精品在天天在线麻豆| 69精品在线观看| 免费高清毛片| 九九热精品视频在线| 国产精品第一区| 又污又黄又无遮挡网站| 中文字幕乱码二三区免费| 国产福利微拍精品一区二区| 又黄又湿又爽的视频| 日韩经典精品无码一区二区| 亚洲最大综合网| 国产一区二区三区视频| 久操线在视频在线观看| 日韩精品亚洲人旧成在线| 毛片基地视频| av大片在线无码免费| 亚洲国产天堂久久综合226114| 日本午夜在线视频| 在线视频亚洲欧美| 欧美一级99在线观看国产| 久久毛片免费基地| 免费99精品国产自在现线| 深夜福利视频一区二区| 精品久久香蕉国产线看观看gif| 亚洲男人的天堂视频| 日韩成人午夜| 99久久精彩视频| 伊人久久大香线蕉影院|