int main (int argc, char *argv[])
argc為參數的個數argv存有輸入參數 第一個為程序自身的名字例:
$ myPRog left right 'and center'
argc 為 4
argv 為 { "myprog", "left", "right", "and center" }
通常,通過一個以 ‘-’ 開頭的單字符或以“--”開頭的多字符命令行參數,改變程序的行為與設置一些選項例:$ sort -r file -r 參數實現了反向排序
$ sort --help
另外如果需要,不帶后續參數的選項可以在一個‘-’后歸并到一起
例:
$ ls -lstr 等價于 ls -l -s -t -r
此外,有些程序可能會有不一樣的風格,getopt為解決這個問題,提供了一個優雅的方案
#include <unistd.h>
int getopt(int argc, char *const argv[], const char *optstring);
extern char *optarg;
extern int optind //在使用getopt處理參數結束后,optind會被指向所有剩余的非選項參數的起始地址
extern int opterr //如果opterr為非零值,getopt函數將會打印出一條錯誤信息
extern int optopt; //在遇到無法識別到的參數時,會將此參數保存于此
argc 和 argv 就是mian函數傳遞進來的參數
optstring 該字符串告訴getopt哪些選項可用,以及它們是否有關聯值
例:getopt(argc, argv, "if:lr");
可用參數為i,f,l,r其中 f: 表示f有關聯值
調用getopt會返回argv數組中的下一個選項字符,通過循環調用可以依次讀取每個選項參數
如果選項參數有關聯值,則optarg將指向這個值
如果處理完,返回-1,特殊參數“--”將使getopt停止掃描選項
如果遇到無法識別的選項,getopt返回一個 ‘?’,將保存到optopt中
如果一個選項要求有一個關聯值,但是沒有按照要求輸入關聯值,通常會返回一個問號(?),這會與上一點沖突
所以將optstring的第一個字符設置為 ' : ',使改為放回一個 ’ :’
getopt_long函數與getopt的作用相同,但是它接受的是多個字符的參數,以 -- 開頭,不具體描述
新聞熱點
疑難解答