main函式詳解

2021-06-21 23:57:45 字數 2398 閱讀 3300

c的設計原則是把函式作為程式的構成模組。main()函式稱之為主函式,乙個c程式總是從main()函式開始執行的。

在最新的 c99 標準中,只有以下兩種定義方式是正確的:

(參閱iso/iec 9899:1999 (e) 5.1.2.2.1 program startup)

int main( void )--無引數形式 

int main( int argc, char *argv )--帶引數形式 

int指明了main()函式的返回型別,函式名後面的圓括號一般包含傳遞給函式的資訊。void表示沒有給函式傳遞引數。關於帶引數的形式,我們等會討論。 

瀏覽老版本的c**,將會發現程式常常以 

main()

這種形式開始。c90標準允許這種形式,但是c99標準不允許。因此即使你當前的編譯器允許,也不要這麼寫。 

你還可能看到過另一種形式:

void main() 

有些編譯器允許這種形式,但是還沒有任何標準考慮接受它。c++ 之父 bjarne stroustrup 在他的主頁上的 faq 中明確地表示:void main( ) 的定義從來就不存在於 c++ 或者 c 。所以,編譯器不必接受這種形式,並且很多編譯器也不允許這麼寫。 

堅持使用標準的意義在於:當你把程式從乙個編譯器移到另乙個編譯器時,照樣能正常執行。

從前面我們知道main()函式的返回值型別是int型的,而程式最後的 return 0; 正與之遙相呼應,0就是main()函式的返回值。那麼這個0返回到那裡呢?返回給作業系統,表示程式正常退出。因為return語句通常寫在程式的最後,不管返回什麼值,只要到達這一步,說明程式已經執行完畢。而return的作用不僅在於返回乙個值,還在於結束函式。 

現在我們來做乙個小試驗(注意:本人的系統是windows xp, 編譯環境是tc)來觀察main()函式的返回值。編寫如下**並編譯執行:

#include "stdio.h" 

int main(void) 

將這個檔案儲存為a.c,編譯執行後會生成乙個a.exe檔案。現在開啟命令提示符,在命令列裡執行剛才編譯好的可執行檔案,然後輸入   echo %errorlevel% ,回車,就可以看到程式返回 乙個0 。如果把 return 0; 改為 return 99; ,那麼很顯然,再次執行上述步驟以後你可以看到程式返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給作業系統之前,被強制型別轉換成整數型別了。 

現在,我們把a.c改回原來的**,然後再編寫另乙個程式b.c:

#include "stdio.h" 

int main(void) 

編譯執行後開啟命令提示符,在命令列裡輸入a&&b 回車,這樣你就可以看到《人鬼情未了》裡面經典的愛情對白: 

i love you. 

i'm too.

&& 的含義是:如果 && 前面的程式正常退出,則繼續執行 && 後面的程式,否則不執行。所以,要是把a.c裡面的 return 0; 刪除或者改為 return 99; ,那麼你只能看到 i love you. 。也就是說,程式b.c就不執行了。現在,大家該明白 return 0; 的作用了吧。

c編譯器允許main()函式沒有引數,或者有兩個引數(有些實現允許更多的引數,但這只是對標準的擴充套件)。這兩個引數,乙個是int型別,乙個是字串型別。第乙個引數是命令列中的字串數。按照慣例(但不是必須的),這個int引數被稱為argc(argument count)。大家或許現在才明白這個形參為什麼要取這麼個奇怪的名字吧,呵呵!至於英文的意思,自己查字典吧。第二個引數是乙個指向字串的指標陣列。命令列中的每個字串被儲存到記憶體中,並且分配乙個指標指向它。按照慣例,這個指標陣列被稱為argv(argument value)。系統使用空格把各個字串格開。一般情況下,把程式本身的名字賦值給argv[0],接著,把最後的第乙個字串賦給argv[1],等等。 

現在我們來看乙個例子:

#include "stdio.h" 

int main(int argc, char *argv) 

編譯執行,開啟命令列並輸入d love.txt 回車。這樣,開啟d.c檔案所在的目錄,你會發現多了乙個名為 love.txt 的檔案,開啟後裡面的內容正是世界上說的最多的那句話。 

當然,你可能會說我不需要使用命令列引數就可以做到這些。是的,你當然可以。使用命令列引數的理由或許就是練習命令列用法,以備以後需要編寫基於命令列的程式。還有乙個好處是,不需要c環境就可以執行已經編譯好的程式。比如,你把上面那個程式編譯後生成的d.exe發給你的女朋友,再告訴她怎麼執行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。

C語言main 函式詳解

c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...

Qt中main函式詳解

include dialog.h qdialog類是對話方塊視窗的基類。對話方塊視窗是主要用於短期任務以及和使用者進行簡要通訊的頂級視窗。qdialog可以是模式的也可以是非模式的。qdialog支援擴充套件性並且可以提供返回值。它們可以有預設按鈕。qdialog也可以有乙個qsizegrip在它的...

C語言main 函式詳解

c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...