C 語言

main 與命令列引數(argc/argv)

當你雙擊一個程式、或在終端機輸入它的名字時,它究竟從哪裡開始?每個 C 程式都有一扇指定的前門,叫做 main——系統呼叫它來開始你的程式。執行從 main 開始,而當 main 回傳時程式結束,把一個小數字交回給啟動它的人,作為成功或失敗的回報。

main 有兩種標準形式。最簡單的是「int main(void)」,它不接受任何東西、回傳一個 int 結束狀態(依慣例 0 表成功、非零表某種失敗)。較豐富的形式接收命令列引數:「int main(int argc, char *argv[])」。這裡 argc(引數計數)是命令列上有幾個詞,包含程式自己的名字,而 argv(引數向量)是那些詞作為字串的陣列。所以若你以「myprog hello 42」執行一個程式,則 argc 是 3,argv[0] 是程式名稱,argv[1] 是 "hello",argv[2] 是 "42"(注意:是字串,不是數字 42——你必須自己轉換)。main 的回傳值成為程式的結束狀態,正是 shell 用來得知你的程式是否成功而讀取的同一個值。

為什麼重要:argc 與 argv 是程式接收來自啟動者(人或腳本)輸入的方式——要處理的檔名、選項、旗標。這是每個命令列工具的基礎。兩個誠實的細節:argv[0] 是程式自己的名字,所以真正的引數從索引 1 開始;而 argv[argc] 保證是一個空指標,標示清單的結尾。引數以文字字串抵達,所以像 "42" 的數字引數必須先用 atoi() 或 strtol() 之類轉換,你才能對它做算術。

#include <stdio.h> int main(int argc, char *argv[]) { printf("%d arguments\n", argc); for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]); return 0; /* 0 = 成功的結束狀態 */ }

以 ./prog hello 42 執行時,這會印出 argc 為 3 與三個 argv 字串;argv[0] 是程式名稱,而 42 以文字抵達。

argv[0] 是程式名稱,所以真正的引數從索引 1 開始,而 argv[argc] 是一個空指標。引數一律是文字——"42" 是字串,不是整數 42;做算術前請用 atoi 或 strtol 轉換。

又称
the main functionprogram entry point主函式程式進入點