青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

關于main()函數(轉)

首先聲明,非本人原創,轉自http://tieba.baidu.com/f?kz=259374701,寫的非常好,謝謝原作者了。main()函數稱之為主函數,一個C程序總是從main()函數開始執行的。

一、main()函數的形式
在最新的 C99 標準中,只有以下兩種定義方式是正確的:

int main( void )--無參數形式
{
...
return 0;
}

int main( int argc, char *argv[] )--帶參數形式
{
...
return 0;
}

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()函數的返回值。編寫如下代碼并編譯運行:

//a.c
#include "stdio.h"
int main(void)
{
printf("I love you.");

return 0;
}

將這個文件保存為a.c,編譯運行后會生成一個a.exe文件。現在打開命令提示符,在命令行里運行剛才編譯好的可執行文件,然后輸入 echo %ERRORLEVEL% ,回車,就可以看到程序返回 一個0 。如果把 return 0; 改為 return 99; ,那么很顯然,再次執行上述步驟以后你可以看到程序返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給操作系統之前,被強制類型轉換成整數類型了。
現在,我們把a.c改回原來的代碼,然后再編寫另一個程序b.c:

//b.c
#include "stdio.h"
int main(void)
{
printf("\nI'm too.");

return 0;
}

編譯運行后打開命令提示符,在命令行里輸入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],等等。
 現在我們來看一個例子:

//c.c
#include "stdio.h"
int main(int argc, char *argv[])
{
int count;

printf("The command line has %d arguments: \n",argc-1);
for(count=1;count<argc;count++)
printf("%d: %s\n",count,argv[count]);

return 0;
}
編譯運行,在命令行輸入c I love you 回車,下面是從命令行運行該程序的結果:

The command line has 3 arguments:
1:I
2:love
3:you

從本例可以看出,程序從命令行中接受到4個字符串(包括程序名),并將它們存放在字符串數組中,其對應關系:
argv[0] ------> c(程序名)
argv[1] ------> I
argv[2] ------> love
argv[3] ------> you
至于argc的值,也即是參數的個數,程序在運行時會自動統計,不必我們操心。
這個例子中,每個字符串都時一個單詞(字母),那既然是字符串,要把一句話當作參數賦給程序該怎么辦?你可以在命令行里這樣輸入 c "I love you." "I'm too."。程序運行結果:

The command line has 2 arguments:
1:I love you.
2:I'm too.

其對應關系:
argv[0] ------> c(程序名)
argv[1] ------> I love you.
argv[2] ------> I'm too.

要注意的是,你在命令行的輸入都將作為字符串形式存儲于內存中。也就是說,如果你輸入一個數字,那么要輸出這個數字,你應該用%s格式而非%d或者其他。
再來看一個例子:
//d.c
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *fp;

fp=fopen(argv[1],"w");
fputs("I love you.",fp);
fclose(fp);

return 0;
}
編譯運行,打開命令行并輸入d love.txt 回車。這樣,打開d.c文件所在的目錄,你會發現多了一個名為 love.txt 的文件,打開后里面的內容正是世界上說的最多的那句話。
當然,你可能會說我不需要使用命令行參數就可以做到這些。是的,你當然可以。使用命令行參數的理由或許就是練習命令行用法,以備以后需要編寫基于命令行的程序。還有一個好處是,不需要C環境就可以運行已經編譯好的程序。比如,你把上面那個程序編譯后生成的d.exe發給你的女朋友,再告訴她怎么運行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。

posted on 2011-05-31 23:42 古月 閱讀(257) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

C++/C

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            你懂的成人av| 99re视频这里只有精品| 亚洲女同在线| 中日韩午夜理伦电影免费| 亚洲精品护士| 欧美日韩伦理在线免费| 欧美激情片在线观看| 欧美高清在线观看| 欧美三级小说| 国产午夜久久久久| 亚洲日韩欧美视频一区| 亚洲免费视频网站| 久久xxxx精品视频| 亚洲第一区色| 亚洲在线中文字幕| 欧美91大片| 国内精品久久久久影院优| 日韩视频不卡中文| 久久精品二区| 夜色激情一区二区| 久久久99久久精品女同性| 国产精品久久久99| 一区二区免费在线观看| 欧美在线视频观看| 一区二区福利| 亚洲免费视频在线观看| 久久精品水蜜桃av综合天堂| 欧美第十八页| 久久精品一区二区三区四区| 欧美日韩视频一区二区三区| 亚洲第一偷拍| 久久人91精品久久久久久不卡| 亚洲一区二区精品在线| 欧美日韩视频在线观看一区二区三区| 激情成人av| 久久一区中文字幕| 久久露脸国产精品| 激情五月综合色婷婷一区二区| 久久精品女人的天堂av| 亚洲欧美大片| 国内精品伊人久久久久av影院 | 在线播放中文一区| 久久久免费av| 欧美福利视频一区| 亚洲愉拍自拍另类高清精品| 一本色道久久88精品综合| 国产精品免费aⅴ片在线观看| 黑丝一区二区三区| 欧美国产日韩精品免费观看| 亚洲高清不卡在线| 久久久噜噜噜久久| 久久久久久久精| 先锋a资源在线看亚洲| 国产女人精品视频| 欧美成熟视频| 国产精品女主播| 国内揄拍国内精品久久| 亚洲欧美99| 久久久噜噜噜久噜久久| 亚洲啪啪91| 亚洲影院色无极综合| 亚洲国产mv| 亚洲精品乱码久久久久久黑人| 国产一级精品aaaaa看| 宅男噜噜噜66一区二区66| 亚洲精品乱码久久久久久日本蜜臀 | 国产午夜精品久久久久久免费视 | 亚洲最快最全在线视频| 亚洲欧美日韩国产综合精品二区| 久久免费视频网站| 亚洲欧美日韩直播| 亚洲国产另类精品专区| 亚洲电影视频在线| 女女同性精品视频| 亚洲日本欧美天堂| 一区电影在线观看| 欧美婷婷六月丁香综合色| 亚洲美女黄色| 欧美一区视频| 亚洲国产精品www| 欧美精品xxxxbbbb| 亚洲网友自拍| 免费观看久久久4p| 亚洲欧美日韩国产中文| 久久精品国产久精国产一老狼| 一区二区在线视频播放| 欧美成人一区二区三区在线观看| 亚洲韩国精品一区| 欧美一区网站| 亚洲黄色视屏| 国产亚洲一区二区在线观看| 免费看成人av| 亚洲午夜日本在线观看| 免费欧美在线视频| 亚洲午夜视频在线观看| 在线成人欧美| 国产永久精品大片wwwapp| 欧美激情一区在线| 久久激情一区| 久久高清一区| 久久av一区二区三区漫画| 一区二区三区日韩在线观看 | 亚洲东热激情| 亚洲国产另类 国产精品国产免费| 欧美激情中文字幕一区二区| 欧美激情一区二区三区高清视频| 亚洲午夜激情| 亚洲少妇一区| 中文亚洲字幕| 久久欧美肥婆一二区| 欧美一区二区成人| 亚洲欧美日韩国产综合| 亚洲影院免费观看| 一区二区三区四区国产精品| 亚洲精品极品| 日韩视频在线一区二区| 日韩一级黄色av| 亚洲制服av| 小嫩嫩精品导航| 久久尤物视频| 夜夜嗨av一区二区三区网页| 亚洲精品一区二区三区av| 日韩视频在线观看一区二区| 亚洲五月婷婷| 在线亚洲美日韩| 性久久久久久久久久久久| 欧美专区18| 欧美激情日韩| 国产一区二区高清不卡| 亚洲人体1000| 久久亚洲精品一区二区| 欧美freesex8一10精品| 宅男在线国产精品| 免费不卡亚洲欧美| 国产婷婷色综合av蜜臀av| 99国产精品| 欧美成人免费视频| 欧美一区二区三区日韩视频| 欧美喷水视频| 最近中文字幕日韩精品 | 久久综合九色综合久99| 欧美日韩精品一区二区在线播放| 国产亚洲人成网站在线观看 | 欧美高清在线视频| 国产日韩欧美不卡| 欧美在线免费| 亚洲欧美韩国| 国产字幕视频一区二区| 午夜在线一区| 欧美一区二区三区在| 国产精品多人| 久久av资源网| 久久精品人人做人人爽| 在线观看精品一区| 美日韩精品免费| 男女精品视频| 亚洲午夜电影网| 亚洲欧美日韩国产中文| 国产一区二三区| 欧美大片网址| 亚洲电影欧美电影有声小说| 一区二区三区高清视频在线观看| 欧美国产日韩一区二区在线观看 | 亚洲欧美第一页| 亚洲桃色在线一区| 亚洲丰满少妇videoshd| 亚洲国产美女| 国产日韩精品一区| 欧美激情一区二区三区| 国产精品夜夜嗨| 欧美黄色一区| 国产一区二区电影在线观看 | 欧美精品粉嫩高潮一区二区 | 午夜精品久久久久久久99水蜜桃 | 亚洲一区二区久久| 亚洲国产精品福利| 香蕉成人久久| 在线亚洲一区观看| 久久国产精品久久久久久久久久 | 欧美色欧美亚洲另类七区| 久久综合九色综合网站| 欧美性事免费在线观看| 亚洲电影免费| 亚洲人成网站999久久久综合| 久久riav二区三区| 久久精品视频导航| 国产视频在线观看一区二区三区| 亚洲精选一区| 亚洲婷婷在线| 欧美性大战久久久久久久蜜臀| 亚洲国产精品成人精品| 亚洲欧美日本国产有色| 亚洲一区在线视频| 国产精品v一区二区三区| 一区二区三区四区五区视频| 亚洲一区二区三区在线看| 国产精品免费aⅴ片在线观看| 亚洲天堂视频在线观看| 欧美一区二视频| 亚洲国产毛片完整版|