c c 處理引數

2021-09-08 01:14:35 字數 2374 閱讀 1103

直接上**:涉及函式getopt(),getopt_long()

1 #include 2 #include 3 #include 4 #include 56/*

7int main(int argc, char *ar**)819

20return 0;21}

22*/

2324

//getopt_long()和getopt_long_only()函式支援長選項的命令列解析,其中,後者的長選項字串是以乙個短橫線開始的,而非一對短橫線。

25int main(int argc, char **ar**)26,

33 ,

34 ,

35

36};

37/*

38*extern char *optarg; //選項的引數指標

39*extern int optind, //下一次呼叫getopt時,從optind儲存的位置處重新開始檢查選項

40*extern int opterr, //當opterr=0時,getopt不向stderr輸出錯誤資訊。

41*extern int optopt; //當命令列選項字元不包括在optstring中或者最後乙個選項缺少必要的引數時,該選項儲存在optopt中,getopt返回'?』42*

43*/

4445

while ( (opt = getopt_long(argc, ar**, optstring, long_options, &option_index)) != -1)46

5354

return0;

55 }

int getopt(int argc, char * const ar**, const char *optstring);

該函式用來解析命令列引數。前兩個引數設為main函式的兩個引數。

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

該選項是乙個帶引數的選項。

例如:make -f filename -n

-f是乙個帶引數的選項,-n是乙個沒有引數的選項。

可以下面這樣呼叫函式getopt來解析上面的例子。

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

此函式的返回值即為當前找到的命令選項,全部選項都找到時的返回值為-1。

通常乙個命令有多個選項,為了取得所有選項,需要迴圈呼叫此函式,直到返回值為-1。

要使用此函式,還有幾個全域性變數必須要了解。

extern char *optarg;  

extern int optind, opterr, optopt;

optarg: 當前選項帶引數時,optarg指向該引數。

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

optopt: 乙個選項在ar**中有,但在optstring中不存在時,或者乙個帶引數的選項沒有引數時,

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

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

int getopt_long(int argc, char * const ar**,

const char *optstring,

const struct option *longopts, int *longindex);

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

前三個引數與函式getopt的引數是一樣的。只支援長選項時,引數optstring設定為null或者空字串

第四個引數是乙個構造體struct option的陣列。此構造體定義在標頭檔案getopt.h中。

struct option ;

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

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。

存在不能識別的選項或者帶引數選項的引數不存在時返回'?

c c 處理引數

直接上 涉及函式getopt getopt long 1 include 2 include 3 include 4 include 56 7int main int argc,char ar 819 20return 0 21 22 2324 getopt long 和getopt long on...

C C 可變引數

函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...

C C 可變引數

函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...