Main 函式是 C++ 程式的開頭,所以任何一個可執行的程式均需要定義 Main 函式。main() 主要是負責與 DOS 間的溝通,這可包括接收由 DOS 傳來的命令列參數,和傳回一整數值給 DOS 二部分,分別敘述如下:
⑴ main 的參數
main() 可以選擇性地接收 0 至 3 個參數,下面是這三個參數的意義及使用方式:
main(int argc, char *argv[], char *env[])
① argc:代表由 DOS 傳來的參數數目再加 1,例如在 DOS 下執行 TEST.EXE 程式:
C:> Test aa bb cc
則 argc 的值爲 4。如果在 DOS 下執行程式時沒傳入任何參數,則 argc 的值爲 1。事實上, argc 是指 argv 內元素的個數。
② argv:內含被執行的全路徑名稱,以及各參數的值。以上例來看:
argv 是一個指位器,它指到一個陣列,而這個陣列內的每一個元素又是字串 (char *) 的指位器,並且最後一個元素的內容爲 NULL 以表結束。由於 DOS 的命令列參數是由 argv[1] 開始放起,所以 argc 的值會是命令列參數的數目再加 1。
③ env:這個參數的型別和 argv 相同,不過它是用來存放 DOS 環境變數的,例如:
main 的 3 個參數必須按順序出現,所以我們不可以將前面的參數省略而保留後面的。以下是 4 種正確的用法:
main() main(int argc) main(int argc, char *argv[]) main(int argc, char *argv[], char *env[])
實例:將 DOS 所傳來的參數及其環境變數印出。
#include<iostream.h> void main(int argc, char *argv[], char *env[]) { int i; cout << "Total number of DOS arguments is " << argc << endl; i = 0; while(argv[i]) // 直到 argv[i] 爲 NULL 爲止 { cout << "argv[" << i << "]:" << argv[i] << endl; i++; } cout << "\nOS Enviroment Variables are :\n"; i = 0; while(env[i]) // 直到 env[i] 爲 NULL 爲止 { cout << "env[" << i << "]:" << env[i] << endl; i++; } }
執行結果如下:
在 DOS 下輸入: C:\WORK>test aa bb cc 執行結果: Total number of DOS arguments is 4 argc[0]: C:\WORK\TEST.EXE argc[1]: aa argc[2]: bb argc[3]: cc DOS Envirment Variables are : env[0]: COMSPEC=C:\COMMAND.COM env[1]: PROMPT=$P$G env[2]: PATH=C:\DOS;C:\TURBOC4\BIN env[3]: TEMP=C:\TEMP
☛ 傳回值
main() 也可以 return 一個整數值給 DOS,這個值會被存入 DOS 本身的 ERRORLEVEL 變數中,以供批次檔判斷使用。依 DOS 的慣例,一般傳回 0 表示程式正常結束,而傳回其他的值則表示在執行時有錯誤發生。例如:
int main(int argc, char *argv[]) { if(argc < 2) return 1; //表示有錯誤發生 ..... return 0; //正常結束 }
事實上,在 main 函式中使用 return N 就和 exit(N) 的功能是一樣的。如果我們不想傳回任何的值,則 main() 應以 void 宣告。因此, main 函式可有二種型別宣告方式:
int main() //傳回一整數值 { ....... return n; } void main() //無傳回值 { ....... return; }