C99標準中的 main 函式

2021-09-01 04:16:08 字數 1983 閱讀 3338

一、main()函式的形式

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

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()函式的返回值

從前面我們知道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; 的作用了吧。

三、main()函式的引數

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 的檔案,開啟後裡面的內容正是世界上說的最多的那句話。

C99標準之前沒有bool型別(C99提供)

我們知道在c 裡有專門的bool型別,用來表示真或假。但是在c語言裡沒有這樣的型別。表示式的值0為假,非0為真。所以條件判斷語句 if while 非常靈活,甚至乙個指標型別都可以是條件表示式。為了使程式更清晰,我們常常會給出如下的巨集定義 typedef int bool define true ...

C99標準的新特性

c語言的發展歷史大致上分為4個階段 old style c c89 c99和c11.c89是最早的c語言規範,於1989年提出,1990年先由ansi 美國國家標準委員會,american national standards institute 推出ansi版本,後來被接納為iso國際標準 iso...

C99標準轉義符大全

轉義字元是c語言中表示字元的一種特殊形式。通常使用轉義字元表示ascii碼字符集中不可列印的控制字元和特定功能的字元,如用於表示字元常量的單撇號 用於表示字串常量的雙撇號 和反斜槓 等。轉義字元用反斜槓 後面跟乙個字元或乙個八進位制或十六進製制數表示。轉義字元 意義 ascii碼值 十進位制 a 響...