3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個贊
1.void main()
有一些書上的,都使用了void main( ) ,其實(shí)這是錯誤的。C/C++ 中從來沒有定義過void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地寫著 “The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.”
這可能是因?yàn)?在 C 和 C++ 中,不接收任何參數(shù)也不返回任何信息的函數(shù)原型為“void foo(void);”??赡苷且?yàn)檫@個,所以很多人都誤認(rèn)為如果不需要程序返回值時可以把main函數(shù)定義成void main(void) 。然而這是錯誤的!main 函數(shù)的返回值應(yīng)該定義為 int 類型,C 和 C++ 標(biāo)準(zhǔn)中都是這樣規(guī)定的。雖然在一些編譯器中,void main() 可以通過編譯,但并非所有編譯器都支持 void main() ,因?yàn)闃?biāo)準(zhǔn)中從來沒有定義過 void main 。g++3.2 中如果 main 函數(shù)的返回值不是 int 類型,就根本通不過編譯。而 gcc3.2 則會發(fā)出警告。所以,為了程序擁有很好的可移植性,一定要用 int main ()。
2.main()
那既然main函數(shù)只有一種返回值類型,那么是不是可以不寫?規(guī)定:不明確標(biāo)明返回值的,默認(rèn)返回值為int,也就是說 main()等同于int main(),而不是等同于void main()。在C99中,標(biāo)準(zhǔn)要求編譯器至少給 main() 這種用法來個警告,而在c98中這種寫法是被允許的。但為了程序的規(guī)范性和可讀性,還是應(yīng)該明確的指出返回值的類型。
3.return 0語句 功能
在C++的程序中,如果你自己寫了個子函數(shù)。那return的意思是告訴主函數(shù),這個子函數(shù)的運(yùn)行結(jié)果,那么同樣的道理,main也是個函數(shù),它運(yùn)行了自然也是有結(jié)果的,這個結(jié)果通常是告訴操作系統(tǒng),自身是正常運(yùn)行結(jié)束了(值為0),還是發(fā)生了異常(這個值就有很多了)。告訴操作系統(tǒng)值是多少,目的是后臺或者SHELL可以從操作系統(tǒng)中取得這個程序的運(yùn)行結(jié)果,從而可以進(jìn)行進(jìn)一步操作,比如,你現(xiàn)在這個程序名叫A,是個清屏程序,那么我想在這個程序運(yùn)行正常后在屏幕上輸出運(yùn)行了。這個輸出是由另外一個B程序?qū)崿F(xiàn)的,那么如果沒有返回值,怎么知道這個程序運(yùn)行正常還是不正常呢。上面的是main函數(shù)返回值最常用的作用。當(dāng)然。其實(shí)main函數(shù)本身是可以調(diào)用這個返回值的,這個的作用就在于多線程的編程中,另外一個線程等待這個程序執(zhí)行完畢,等待的就是這個MAIN函數(shù)的執(zhí)行結(jié)果。

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個贊
你的理解有誤。首先,這段代碼是先執(zhí)行了輸出99在屏幕上,然后在退出之前才返回的0。而不是正常退出了之后系統(tǒng)才去處理輸出。其次,返回多少是程序員自己控制的,你喜歡將你上面代碼的return 0改成return -1,程序就返回-1出去。另外,程序出錯的時候,也不會自動返回什么值給系統(tǒng),全都是程序員自己代碼控制。而至于返回出去的值怎么使用,也不是操作系統(tǒng)自己處理,而是外部調(diào)用的人自己根據(jù)需要控制。例如如果B程序是被A程序在程序中調(diào)用的,A程序就可以檢查B程序的返回值來進(jìn)行相應(yīng)處理。而一些腳本,批處理也可以檢查程序返回值來進(jìn)行正確的操作。至于返回什么代表什么,是這個程序的開發(fā)者自己制定。只是,一般習(xí)慣上,都在運(yùn)行正常,正常退出的時候return 0.

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個贊
打印語句是立即執(zhí)行,所以理想的情況是先打印99,然后退出main函數(shù),只不過,打印的數(shù)據(jù)立即會交給串口驅(qū)動然后才退出main函數(shù),而串口驅(qū)動是有自己的緩存的,所以會有一定延遲。
執(zhí)行賦值操作出錯,系統(tǒng)會做出不同響應(yīng),這個要取決于具體的錯誤類型,比如訪問空指針、除數(shù)為0都是嚴(yán)重錯誤而停止進(jìn)程
函數(shù)返回值的意義是程序員定義的,函數(shù)外部根據(jù)這個定義來決定函數(shù)運(yùn)行的情況,比如我可以讓函數(shù)返回0來代表函數(shù)執(zhí)行失敗,也可以定義-10來代表執(zhí)行失敗。
- 3 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報