c的設計原則是把函式作為程式的構成模組。main()函式稱之為主函式,乙個c程式總是從main()函式開始執行的。
在最新的 c99 標準中,只有以下兩種定義方式是正確的:
int main( void )--無引數形式int指明了main()函式的返回型別,函式名後面的圓括號一般包含傳遞給函式的資訊。void表示沒有給函式傳遞引數。關於帶引數的形式,我們等會討論。int main( int argc, char *argv )--帶引數形式
瀏覽老版本的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()函式的返回值。編寫如下**並編譯執行:
//a.c將這個檔案儲存為a.c,編譯執行後會生成乙個a.exe檔案。現在開啟命令提示符,在命令列裡執行剛才編譯好的可執行檔案,然後輸入 echo %errorlevel% ,回車,就可以看到程式返回 乙個0 。如果把 return 0; 改為 return 99; ,那麼很顯然,再次執行上述步驟以後你可以看到程式返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給作業系統之前,被強制型別轉換成整數型別了。#include "stdio.h"
int main(void)
現在,我們把a.c改回原來的**,然後再編寫另乙個程式b.c:
//b.c編譯執行後開啟命令提示符,在命令列裡輸入a&&b 回車,這樣你就可以看到《人鬼情未了》裡面經典的愛情對白:#include "stdio.h"
int main(void)
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],等等。
現在我們來看乙個例子:
//c.c
#include "stdio.h"
int main(int argc, char *argv)
編譯執行,開啟命令列並輸入d love.txt 回車。這樣,開啟d.c檔案所在的目錄,你會發現多了乙個名為 love.txt 的檔案,開啟後裡面的內容正是世界上說的最多的那句話。
當然,你可能會說我不需要使用命令列引數就可以做到這些。是的,你當然可以。使用命令列引數的理由或許就是練習命令列用法,以備以後需要編寫基於命令列的程式。還有乙個好處是,不需要c環境就可以執行已經編譯好的程式。比如,你把上面那個程式編譯後生成的d.exe發給你的女朋友,再告訴她怎麼執行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。
帶命令列引數的 main 函式詳解
c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...
main函式帶命令列引數的使用
生成.exe檔案後,可直接拖入到命令列,直接開啟 include include include floatf int i,int j,char s int main int argc,char y argc是開啟命令提示符,統計從鍵盤中輸入的個數,這樣定義的y不是一維陣列 int i,j,n i ...
main函式命令列引數的使用
乙個程式的main 函式的可以包括兩個引數 通常情況下,將第乙個引數命名為argc,第二個引數為argv 當然引數名字可以換 由於字串陣列有兩種表達方式,因此,main函式存在兩種書寫方法 形式一 int main int argc,char argv 這裡使用char argv 2。形式二 int...