getopt_long原型

#define no_argument        0
#define required_argument 1
#define optional_argument 2 struct 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 = ; static option long_options[] = {
{"help", no_argument, &ret, 'h'},
{"version", no_argument, , 'v'},
{"arga", required_argument , , 'a'},
{"argb", required_argument , , 'b'},
{, , , }
}; int opt = ;
int option_index = ;
while((opt = getopt_long(argc, argv, "hva:b:", long_options, &option_index)) != -){
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[]);
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[]); exit();
}
void version()
{
printf("V1.1.1\n");
exit();
} int main(int argc, char** argv){
int ret = ;
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 ;
}

使用getopt_long来解析参数的小函数模板的更多相关文章

  1. C++泛型编程之函数模板

    泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中, ...

  2. C++函数模板&类模板

    函数模板 模板概念及语法 主要目的,简化代码,减少重复代码.基本语法格式:  template<class T> 或者 template<typename T> //末尾不加分 ...

  3. C++函数模板

    函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,也就是说,函数模板代表一个函数家族,这些函数的元素是未定的,在使用的时候被参数化. 本文地址:http://www.cnblogs. ...

  4. 25.C++- 泛型编程之函数模板(详解)

    本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数和函数模板 当我们想写个Swap()交换函数时,通常这样写: void Swap(int& a, int&am ...

  5. C++函数模板的显示调用与隐式调用

    C++函数模板可以显示调用与可以隐式调用 首先定义函数模板: template <class T> inline const T& c_max (const T& a, c ...

  6. C++ Templates (1.1 初窥函数模板 A First Look at Function Templates)

    返回完整目录 目录 1.1 初窥函数模板 A First Look at Function Templates 1.1.1 定义模板 Defining the Template 1.1.2 使用模板 ...

  7. C++ 初识函数模板

    1. 前言 什么是函数模板? 理解什么是函数模板,须先搞清楚为什么需要函数模板. 如果现在有一个需求,要求编写一个求 2 个数字中最小数字的函数,这 2 个数字可以是 int类型,可以是 float ...

  8. 如何使用getopt()函数解析参数

    最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main ...

  9. C++解析四-友员函数、内联函数、静态成员

    友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员.尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数.友元可以是一个函 ...

随机推荐

  1. Lind.DDD.Events事件总线~自动化注册

    回到目录 让大叔兴奋的自动化注册 对于领域事件之前说过,在程序启动时订阅(注册)一些事件处理程序,然后在程序的具体位置去发布(触发)它,这是传统的pub/sub模式的体现,当然也没有什么问题,为了让它 ...

  2. 使用MyEclipse 开发struts2框架结构详细教程——以登录为例

    1.首先建立Web Project,名称为:struts2 ,然后选择Java EE6.0,点击Finish. 2.右击“struts”选择MyEclipse->Add Struts Capab ...

  3. 哈哈:sqlserver2008附加数据库时操作系统错误5(拒绝访问)错误5012的解决办法

    老师说:无论干什么,出错了,先大笑三声.如果人多了,在心里也要大笑三声.哈哈哈!!! 刚刚重装系统完后,然后想学习.自己去安装sqlserver2008数据库,完之后想附加之前的数据库.可是当我一点确 ...

  4. (转)SqlServer索引及优化详解(1)

    (一)深入浅出理解索引结构         实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚 ...

  5. jQuery静态方法noConflict的使用和源码分析

    所谓静态方法是jQuery本身得公共方法,并不需要通过实例化来调用,一般也称为工具方法,下面先来列绝下jQuery.noConflict方法的用法: noConflict() 方法让渡变量 $ 的 j ...

  6. js => ES6一个新的函数写法

    今天在网上参观到一个写法,返回字符串个个字母的个数 var arr='aaabbccaa'; var info = arr.split('').reduce((p, k) => (p[k]++ ...

  7. Android Studio安装配置、环境搭建详细步骤及基本使用

    前言 Android Studio的安装配置及使用篇终于来啦~ 废话不多说,以下针对JDK正确安装(及其环境变量配置完毕,即Java开发环境下).Android Studio的安装,配置,以及创建工程 ...

  8. iOS 开发中的争议(一)

    序言 打算分享一些有争议的话题,并且表达一下我的看法.这是该系列的第一篇,我想讨论的是:类的成员变量应该如何定义? 在 Objective-C 的语言的早期,类的私有成员变量是只能定义在 .h 的头文 ...

  9. IOS开发基础知识--碎片38

    1:FCUUID获取设备标识的运用 a:作者 githun地址 https://github.com/fabiocaccamo/FCUUID 因为里面还用到作者的另外一个类UICKeyChainSto ...

  10. CoreData数据库浅析

    Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...