考慮到main函數的特殊性,lz不明白這個問題可以理解。
成都創新互聯主營白銀網站建設的網絡公司,主營網站建設方案,app開發定制,白銀h5微信小程序開發搭建,白銀網站營銷推廣歡迎白銀等地區企業咨詢
main()是省略了返回值類型,C語言會默認認為成main的類型為int,在main()的函數體內要返回一個值,如return 0;
而void main()的返回值是void類型,也就是說沒有返回值。這樣在main()的函數體內你就不用寫return 0;或者return 1;之類的返回語句。
在一個程序中,可以說你看不出兩者的差別,因為main()是C語言的入口點,入口點如果返回了程序也就結束了,因此C語言的這個特性似乎沒用。可沒用的話,C語言的設計者為什么要這么做呢?!肯定有用。
沒錯,前面我說的是在一個程序中,它似乎沒用。可如果一個程序prog2調用另一個程序prog1的話(這里指的是prog2直接調用prog1編譯好的可執行文件),那么這個特性就有用了。因為prog2要知道prog1運行之后的狀態。比如你用C寫了一個刪除文件的程序(暫且命名為delf),然后用另一個程序去調用delf,那么調用結果怎么樣啊?這個文件是否刪掉了?這是int main()就會派上用場了。C語言中默認的main如果返回為0,那么這個程序調用就成功了,其他值,則為不同的錯誤代碼。在你的delf程序中,如果那個文件刪除成功,那么就在int main()中返回0,其他調用delf的程序就知道,噢,這個操作成功了。
在unix/linux系統中的很多命令都是通過這種方式獲得運行結果的。
關于譚浩強的書,我想不用多說,發行量說明了一切。畢竟第二版在編寫的時候還比較早,而第三版根據很多現在的需要進行了改寫,內容當然會好些。鑒于lz是初學C,其實大可不必在這個問題上浪費太多時間,當你有了更多的項目經驗,對這個問題會有更深刻的理解。
上面我已經給出了main()、int main()和void main()的區別,但建議lz忽略這個差別,認為成二者一樣,先把C的其他部分學好。至于只寫成main(),我并不推薦,就算編譯器通過了,這種編程的風格也太不嚴謹,不利于好的習慣的養成。
一、定義
main函數,又稱主函數,是程序執行的起點,main是相對來說的,如同音學理論之主調于泛音,泛音即程序中的除main之外的其他函數,迎合人們的思考方式而生成的而非必定的模式.有主有次,執行起來條清縷析,既可將程序模塊化又實現了一個閉合的整體。
二、main()函數的形式
在最新的 C99 標準中,只有以下兩種定義方式是正確的:
int main(?void?)? /*?無參數形式?*/
{
...
return 0;
}
int main(?int argc, char *argv[]?) /*?帶參數形式?*/
{
...
return 0;
}
int指明了main()函數的返回類型?,函數名后面的圓括號一般包含傳遞給函數的信息。void表示沒有給函數傳遞參數。
三、main()函數的返回值
從前面我們知道main()函數的返回值類型是int型的,而程序最后的 return 0; 正與之遙相呼應,0就是main()函數的返回值。那么這個0返回到那里呢?返回給操作系統,表示程序正常退出。
因為return語句通常寫在程序的最后,不管返回什么值,只要到達這一步,說明程序已經運行完畢。而return的作用不僅在于返回一個值,還在于結束函數。
四、main()函數的參數
C編譯器允許main()函數沒有參數,或者有兩個參數?(有些實現允許更多的參數,但這只是對標準的擴展)。這兩個參數,一個是int類型,一個是字符串類型。
第一個參數是命令行中的字符串數。按照慣例(但不是必須的),這個int參數被稱為argc(argument count)。第二個參數是一個指向字符串的指針數組。命令行中的每個字符串被存儲到內存中,并且分配一個指針指向它。
按照慣例,這個指針數組被稱為argv(argument value)。系統使用空格把各個字符串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最后的第一個字符串賦給argv[1]?,等等。
擴展資料
C++中的main函數的應用:
C++繼承了C語言的大部分特性,因此保留了“程序總是從main函數開始執行,且總是默認從main函數的return語句或結尾處結束運行”這一傳統,但是要注意,C++中的main函數要想作為程序執行的出入口,必須寫在全局(Global)范圍,不能寫成某個結構體或某個類的成員。
雖然main函數可以作為結構體或者類的成員函數,但相應地會失去作為程序出入口的功能。C++中全局main函數的書寫格式與C語言完全相同,功能也完全相同,且同一C++程序同樣只能有一個全局main函數。
參考資料:百度百科——main函數
在C語言中,main函數可被遞歸調用
在C++標準中,main函數不可以被遞歸調用
但是許多C++編譯器對標準作出了擴展,使得main函數可以被遞歸調用。
可以用Visual C++做個實驗
1)用/Tc編譯器選項(使用C編譯器),main可以遞歸調用
2)用/Tp(編譯C++)和/Ze(啟用語言擴展),main可以遞歸調用
3)用/Tp(編譯C++)和/Za(禁用語言擴展),
main不可以遞歸調用
另外,根據我的經驗,90%的C/C++書籍作者對C/C++并不是完全了解。只有看經典書籍才能在技術細節上沒有錯誤或模糊。
假如有一函數f, 沒有參數, 則要這樣調用:
f();
其中, f是函數f的函數名, 但對于編譯器來講, f是一個地址, 它指向了f函數代碼段的開頭部分.而()是一個運算符, 它非常類似于*, 但是*是取值的, 而()是讓程序跳轉到f處執行程序. 最后的那個分號就是標識著一個語句的結束
如果f有一個整型的參數, 那么需要這樣調用:
f(1);
只是多了一個1, 這個1就是()運算符要復制到f函數的棧中了, 準確地說是復制到它的形參中.
如果f有多個參數, 則只需要在每個形參之間打上逗號:
f(1, 2, 3);
逗號只是用來起分隔作用.(由學區房拍賣提供)
網站欄目:c語言調用main函數 請簡述C語言中main函數的作用
當前網址:http://vcdvsql.cn/article14/hehdge.html
成都網站建設公司_創新互聯,為您提供網站排名、網站內鏈、ChatGPT、面包屑導航、營銷型網站建設、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯