C語言main函數(shù)的參數(shù)

main的參數(shù)

C語言規(guī)定main函數(shù)的參數(shù)只能有兩個剪芍,習慣上這兩個參數(shù)寫為argc和argv唉窃,argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數(shù)組。格式:

int main(int argc,char *argv[]) 

由于main函數(shù)不能被其它函數(shù)調用摩瞎, 因此不可能在程序內部取得實際值拴签。那么,在何處把實參值賦予main函數(shù)的形參呢?

實際上,main函數(shù)的參數(shù)值是從操作系統(tǒng)命令行上獲得的旗们。當我們要運行一個可執(zhí)行文件時蚓哩,在DOS提示符下鍵入文件名,再輸入實際參數(shù)即可把這些實參傳送到main的形參中去上渴。在DOS下一條完整的運行命令包含2部分:命令與相應的參數(shù)岸梨。格式為:

命令 參數(shù)1 參數(shù)2 ... 

這種格式也叫命令行,命令行中的命令就是可執(zhí)行文件的文件名稠氮,它后面的參數(shù)要用空格分隔曹阔,是對命令的進一步補充,即是傳遞給main()函數(shù)的參數(shù)隔披。

其中整型argc表示命令行中字符串的個數(shù)赃份,argc的值是在輸入命令行時由系統(tǒng)按實際參數(shù)的個數(shù)自動賦予的。指針數(shù)組argv[]指向命令行中的各個字符串。這兩個參數(shù)可以用任何合法的標識符命名抓韩,但是習慣采用argc和argv纠永。

#include <stdio.h>

int main(int argc,char *argv[]){
    int i=0;
    printf("argc = %d\n",argc);
    for(i = 0;i<argc;i++){
        printf("argv[%d] = %s\n",i,argv[i]);
    }
    return 0;
}

編譯后在命令行中執(zhí)行:

template_arg.exe -a -b -c -d hello.txt

程序運行輸出:

argc = 6
argv[0] = template_arg.exe
argv[1] = -a
argv[2] = -b
argv[3] = -c
argv[4] = -d
argv[5] = hello.txt

可見,argc為6谒拴,argv[0]為自身運行目錄路徑和程序名尝江。
從argv[1]開始指向命令行中我們添加的參數(shù)。
這種形式帶來的問題就是選項開關和其他參數(shù)(如文件名)之間分類不清(都是字符串)英上,實現(xiàn)命令行參數(shù)位置的靈活和不出錯茂装,意味著在代碼中解析命令行參數(shù)時要充分考慮可能出現(xiàn)的情況。

有些C程序員采用了一種約定善延,帶'--'的參數(shù)少态,表示從這個參數(shù)開始,后面的參數(shù)都不是選項開關易遣,即便它是以連字符開頭彼妻。一種更好的解決辦法是把包袱扔給系統(tǒng)而不是用戶,使用參數(shù)處理器把參數(shù)分成選項開關和非選項開關兩種豆茫,目前這種簡單的argv機制由于使用的太廣侨歉,因而不可能對它做任何修改。

main的返回值

在 C99 標準中揩魂,main函數(shù)只有以下兩種定義方式是正確的:

int main( void ) 
int main( int argc, char *argv[]) 

void main()的用法是錯誤的幽邓。
main 函數(shù)的返回值類型必須是 int,返回值用于說明程序的退出狀態(tài)火脉。
如果返回0牵舵,則代表程序正常退出;返回其它數(shù)字的含義則由系統(tǒng)決定倦挂。
通常畸颅,返回非零代表程序異常退出。
如果 main 函數(shù)的最后沒有寫 return 語句的話方援,C99 規(guī)定編譯器要自動在生成的目標文件中(如 exe 文件)加入return 0没炒。
在 C89 中,main( ) 是可以接受的犯戏,也就是說 main()等同于int main()送火,不明確標明返回值的,默認返回值為int先匪。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末种吸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胚鸯,更是在濱河造成了極大的恐慌骨稿,老刑警劉巖笨鸡,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜钳,死亡現(xiàn)場離奇詭異坦冠,居然都是意外死亡,警方通過查閱死者的電腦和手機哥桥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門辙浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拟糕,你說我怎么就攤上這事判呕。” “怎么了送滞?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵侠草,是天一觀的道長。 經(jīng)常有香客問我犁嗅,道長边涕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任褂微,我火速辦了婚禮功蜓,結果婚禮上,老公的妹妹穿的比我還像新娘宠蚂。我一直安慰自己式撼,他們只是感情好,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布求厕。 她就那樣靜靜地躺著著隆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呀癣。 梳的紋絲不亂的頭發(fā)上旅东,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音十艾,去河邊找鬼抵代。 笑死,一個胖子當著我的面吹牛忘嫉,可吹牛的內容都是我干的荤牍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼庆冕,長吁一口氣:“原來是場噩夢啊……” “哼康吵!你這毒婦竟也來了?” 一聲冷哼從身側響起访递,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晦嵌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惭载,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡旱函,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了描滔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棒妨。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖含长,靈堂內的尸體忽然破棺而出券腔,到底是詐尸還是另有隱情,我是刑警寧澤拘泞,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布纷纫,位于F島的核電站,受9級特大地震影響陪腌,放射性物質發(fā)生泄漏涛酗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一偷厦、第九天 我趴在偏房一處隱蔽的房頂上張望商叹。 院中可真熱鬧,春花似錦只泼、人聲如沸剖笙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弥咪。三九已至,卻和暖如春十绑,著一層夾襖步出監(jiān)牢的瞬間聚至,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工本橙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扳躬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓甚亭,卻偏偏與公主長得像贷币,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亏狰,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內容