直接上**:涉及函式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...