首页 > 代码库 > 使用getopt_long来解析参数的小函数模板
使用getopt_long来解析参数的小函数模板
getopt_long原型
#define no_argument 0#define required_argument 1#define optional_argument 2struct option { const char *name; //名称,下面实例中使用的--help,--version int has_arg; //是否有参数,可选0,1,2三个值,就是上面的那三个宏定义 int *flag; //返回值,传入的一个int指针,表示该参数的解析结果,如果是NULL,那么返回值就会被写到getopt_long的返回值中。 int val; //name的简写};#include <unistd.h>int getopt(int argc, char * const argv[],const char *optstring);extern char *optarg;extern int optind, opterr, optopt;#include <getopt.h> int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
optstring就是下面程序中的:"hva:b:",就是那一群简写集合,后面带冒号意思(比如-a)就是这个-a后面要加参数。
getopt_long实例
经常为了写小程序的解析参数感觉麻烦,所以就写一个小函数模板以后复制用。
#include <getopt.h>#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;int discovery_options(int argc, char** argv, bool& show_help, bool& show_version,string& input){ int ret = 0; static option long_options[] = { {"help", no_argument, &ret, ‘h‘}, {"version", no_argument, 0, ‘v‘}, {"arga", required_argument , 0, ‘a‘}, {"argb", required_argument , 0, ‘b‘}, {0, 0, 0, 0} }; int opt = 0; int option_index = 0; while((opt = getopt_long(argc, argv, "hva:b:", long_options, &option_index)) != -1){ switch(opt){ case ‘h‘: show_help = true; break; case ‘v‘: show_version = true; break; case ‘a‘: input = optarg; break; case ‘b‘: input = optarg; break; default: show_help = true; break; } } // check values return ret;}void help(char** argv){ printf("%s, Copyright (c) 2013-2015 BuguTian\n", argv[0]); printf("" "Usage: %s <Options> <-a REQUEST>\n" "-h no arg,mean help\n" "-v no arg,mean version\n" "-a arga\n" "-b argb\n", argv[0]); exit(0);}void version(){ printf("V1.1.1\n"); exit(0);}int main(int argc, char** argv){ int ret = 0; bool show_help = false; bool show_version = false; string input=""; if((ret = discovery_options(argc, argv, show_help, show_version, input))){ printf("discovery options failed. ret=%d", ret); return ret; } if(show_help){ help(argv); } if(show_version){ version(); } printf("running...\n"); return 0;}
使用getopt_long来解析参数的小函数模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。