天天看點

main() 處理指令行選項

       首先,先了解下什麼叫做指令行選項呢?指令行選項是在dos環境(如果是windows作業系統,那麼在“開始”菜單下找到“運作”,然後鍵入“cmd”,即可進入dos環境)下執行的指令,它是有空格分隔的指令。例如:

             prog -d -o ofile data0

       prog:是可執行檔案的檔案名,如prog.exe是可執行檔案,它的檔案名是prog。至于後面的參數是什麼意思後面的介紹将會講到。

       main()函數的一種擴充原型為:

         main( int argc, char *argv[] )

         {...}

        指令行選項是main()的實參。在main()函數中,我們可以通過一個名為argv的C風格字元串數組通路它。argc包含指令行選項的個數,argv包含argc個C風格字元串,代表了由空格分隔的指令選項。例如對于上面剛才的舉的指令行選項,argc和argv的值分别如下:

        argc = 5

argv的值被設定成如下的C風格字元串:

       argv[0] = "prog" ;

       argv[1] = "-d" ;

       argv[2] = "-o" ;

       argv[3] = "ofile" ;

       argv[4] = "data0" ;

       argv[0] 總是被設定為目前正被調用的指令。比如本例是prog.exe指令正在被調用,是以argv[0]的值是prog。從索引1到argc-1表示被傳遞給指令的實際選項。

指令行選項的格式如下:

           program_name [-d] [-h] [-v] [-o output_file] [-l limit_value] file_name [file_name [file_name [ ... ]]]

方括号的内容是可選的。例如,最小的指令行隻要給出要處理的檔案:

           prog chap1.doc

-d:表示準備調試

-h:表示打開幫助文檔

-v:表示顯示版本資訊

-o:表示處理輸出檔案

-l:準備處理限制量

main函數的參數如何獲得實參的值呢?

        由于main函數不能被其它函數調用, 是以不可能在程式内部取得實際值。那麼,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從作業系統指令行上獲得的。當我們要運作一個可執行檔案時,在DOS提示符下鍵入檔案名,再輸入實際參數即可把這些實參傳 送到main的形參中去。

下面舉一個具體的例子:

#include <iostream>

using namespace std;

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

{  

 cout << "argc= " << argc << endl;  

 for(int i=0;i<argc;i++)  

 {  

  cout << "argv[" << i << "] = " << argv[i] <<endl;  

 }  

 return 0;  

}

首先,我們先編譯且運作該檔案,得到如下的結果:

main() 處理指令行選項

從上面我們可以知道:

argc = 1

argv[0]為可執行指令的路徑。

然後我們根據可執行檔案的路徑進入到該檔案下,即進入dos環境下:

main() 處理指令行選項

可以看到這時argc 和argv的值了。

繼續閱讀