天天看點

c/c++處理參數

直接上代碼:涉及函數getopt(),getopt_long()

   int getopt(int argc, char * const argv[], const char *optstring);

  該函數用來解析指令行參數。前兩個參數設為main函數的兩個參數。

  optstring設為由該指令要處理的各個選項組成的字元串。選項後面帶有冒号':'時,

  該選項是一個帶參數的選項。

  例如:make -f filename -n

    -f是一個帶參數的選項,-n是一個沒有參數的選項。

  可以下面這樣調用函數getopt來解析上面的例子。

    c = getopt(argc, argv, "f:n");

  此函數的傳回值即為目前找到的指令選項,全部選項都找到時的傳回值為-1。

  通常一個指令有多個選項,為了取得所有選項,需要循環調用此函數,直到傳回值為-1。

  要使用此函數,還有幾個全局變量必須要了解。

    extern char *optarg;  

    extern int optind, opterr, optopt;

    optarg: 目前選項帶參數時,optarg指向該參數。

    optind: argv的索引。通常選項參數取得完畢時,通過此變量可以取得非選項參數(argv[optind])

    optopt: 一個選項在argv中有,但在optstring中不存在時,或者一個帶參數的選項沒有參數時,

         getopt()傳回'?',同時将optopt設為該選項。

    opterr: 将此變量設定為0,可以抑制getopt()輸出錯誤資訊。

 int getopt_long(int argc, char * const argv[],

                  const char *optstring,

                  const struct option *longopts, int *longindex);

  這是支援長指令選項的函數,長選項以'--'開頭。

    前三個參數與函數getopt的參數是一樣的。隻支援長選項時,參數optstring設定為NULL或者空字元串

  第四個參數是一個構造體struct option的數組。此構造體定義在頭檔案getopt.h中。

  struct option {

    const char *name;

    int has_arg;

    int *flag;

    int val;

  };

  構造體各個成員的解釋如下

    name   : 長選項的名字

    has_arg: no_argument或0表示此選項不帶參數,required_argument或1表示此選項帶參數,optional_argument或2表示是一個可選選項。

    flag : 設定為NULL時,getopt_long()傳回val,設定為NULL以外時,getopt_long()傳回0,且将*flag設為val。

    val : 傳回值或者*flag的設定值。有些指令既支援長選項也支援短選項,可以通過設定此值為短選項實作。

  此數組的最後一個須将成員都置為0。

  關于傳回值有以下幾種情況:

    識别為短選項時,傳回值為該短選項。

    識别為長選項時,如果flag是NULL的情況下,傳回val,如果flag非NULL的情況下,傳回0。

    所有選項解析結束時傳回-1。

    存在不能識别的選項或者帶參數選項的參數不存在時傳回'?

繼續閱讀