国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

帶命令行參數(shù)的main函數(shù)詳解

2019-11-08 01:56:26
字體:
供稿:網(wǎng)友

版權(quán)聲明

博  主:thunder_fan聲  明:喝水不忘挖井人,轉(zhuǎn)載請注明出處。聯(lián)系方式:cllshxz#163dotcom(請自行將郵箱改為正確格式)說 明:本篇博客參考,豆丁文庫的一篇文檔,沒有找到原作者。

正文

C語言程序是把函數(shù)作為構(gòu)成模塊的。而main()函數(shù)被稱之為主函數(shù),一個C程序總是從main()函數(shù)開始執(zhí)行。

一.main()函數(shù)的形式

在最新的C99標(biāo)準(zhǔn)中,只有以下兩種定義方式是正確的:

int main(void)//無參數(shù)形式 { ... return 0; } int main(int argc,char *argv[])//帶參數(shù)形式 { ... return 0; }

int指明了main()函數(shù)的返回類型,函數(shù)名后面的圓括號一般包含傳遞給函數(shù)的信息。void表示沒有 給函數(shù)傳遞參數(shù)。 在老版本的C代碼,將會發(fā)現(xiàn)程序常常以 main() 這種形式開始。C90標(biāo)準(zhǔn)允許這種形式,但是C99標(biāo)準(zhǔn)不允許。因此即使你當(dāng)前的編譯器允許,也不要 這么寫。 你還可能看到過另一種形式: void main() 有些編譯器允許這種形式,但是還沒有任何標(biāo)準(zhǔn)考慮接受它。C++之父 Bjarne Stroustrup在他的 主頁上的FAQ中明確表示:void main()的定義從來就不存在于C++或者C。所以,編譯器不必接受這種形式,并且很多編譯器也不允許這么寫。

堅(jiān)持標(biāo)準(zhǔn)的意義在于:當(dāng)你把程序從一個編譯器移動另一個編譯器時,照樣能正常運(yùn)行。

二.main()函數(shù)的返回值

  從前面我們知道m(xù)ain()函數(shù)的返回值類型是int類型的,而程序最后的return 0;是與之相對應(yīng)的 ,0就是main()函數(shù)的返回值。那么這個0返回值回到哪里呢?返回給操作系統(tǒng),表示程序正常退出。因?yàn)閞eturn語句通常寫在程序的最后,不管返回是什么值,只要到達(dá)這一步,說明程序已經(jīng)運(yùn)行完畢。而return的作用不僅在于返回一個值,還在于結(jié)束函數(shù)?,F(xiàn)在我們編寫小程序來做測驗(yàn)。

實(shí)驗(yàn)環(huán)境:Ubuntu

編譯器:gcc 實(shí)驗(yàn)步驟

?

STEP1:編寫下面兩個程序

hello.c

int main(void) { world.c

int main(void) { printf("/n world"); return 0; }

STEP2:首先將兩個C文件編譯生成可執(zhí)行文件為hello和world,然后在終端中輸入以下命令:./hello&&./world,你將會發(fā)現(xiàn),最終輸出hello world。&&的作用是等前面的程序正常退出后,執(zhí)行后面的程序。

STEP3:修改第一個文件,將第一個文件的返回值改為1,再次編譯運(yùn)行。發(fā)現(xiàn)只輸出了hello。

結(jié)論:return 0;的作用是正常結(jié)束主函數(shù)的運(yùn)行。

三.main()函數(shù)的參數(shù)

C編譯器允許main()函數(shù)沒有參數(shù),或者有兩個參數(shù),(但這只是對標(biāo)準(zhǔn)的擴(kuò)展)。這兩個參數(shù),一個int類型,一個是字符串類型。第一個參數(shù)是命令行中的字符串?dāng)?shù)。按照慣例(但不是必須的),這個int參數(shù)被稱為argc(argument count)。大家或許現(xiàn)在才明白這個形參為什么要取這個奇怪的名字吧。第二個參數(shù)是一個指向字符串字符的指針數(shù)組。命令行中的每個字符串被存儲到內(nèi)存中,并且分配一個指針指向它。按照慣例,這個指針數(shù)組被稱為argv(argument value).系統(tǒng)使用空格把各個字符串隔開。一般情況下,把程序本身的名字付給argv[0],接著,把最后的第一個字符串賦給argv[0],接著,把最后的第一個字符串賦給argv[1],等

下面取個例子: Step1:新建一個文件–test.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; }

Step2:使用gcc test.c -o test編譯生成可執(zhí)行文件,輸入命令./test I love you運(yùn)行,你將看到以下結(jié)果:

mark

從這個例子中能知道,這個程序接收了四個參數(shù),包括可執(zhí)行程序的命令,并將這四個參數(shù)放入到argv[]中,對應(yīng)關(guān)系如下:

argv[0]—>./test argv[1]—>I argc[2]—>love argv[3]—>you

argc則記錄了參數(shù)的個數(shù)。

上面的例子中我們將單個單詞或字符作為參數(shù),傳入字符串?dāng)?shù)組中,當(dāng)然你也可以傳入字符串。 比如:輸入./test "haha" "xixi",結(jié)果如下:

mark

要注意的是,你在命令行的輸入都將作為字符串形式存儲于內(nèi)存中,也就是說,如果你輸入一個數(shù)字,那么輸入這個數(shù)字,你應(yīng)該用%s格式而非%d或者其他。

再來看一個例子:新建一個文件file.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; }

編譯生成可執(zhí)行文件,然后運(yùn)行,輸入./file 1.txt,你將會發(fā)現(xiàn)當(dāng)前目錄下出現(xiàn)一個1.txt文件。

好了,現(xiàn)在大家已經(jīng)對main()的命令行參數(shù)有直觀的理解了吧。

如有錯誤歡迎指出。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 卢氏县| 陇川县| 额敏县| 铜梁县| 从江县| 古田县| 昭通市| 北安市| 深水埗区| 临沭县| 岑溪市| 隆安县| 泸水县| 玉田县| 昌黎县| 台山市| 宁德市| 龙门县| 哈尔滨市| 将乐县| 尖扎县| 龙岩市| 清远市| 油尖旺区| 华蓥市| 湘潭市| 兰州市| 禹州市| 勐海县| 喜德县| 四川省| 旺苍县| 宁波市| 克什克腾旗| 若羌县| 贵溪市| 东安县| 平昌县| 油尖旺区| 澳门| 积石山|