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.Manage项目核心技术分享

    回到目录 关于Lind.DDD.Manager的培训与学习 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD,Lind.DDD.Manager 关于Lind.DDD.Manager 由于数据模 ...

  2. ajax分页与组合查询配合使用

    使用纯HTML页与js.ajax.Linq实现分页与组合查询的配合使用 <body> <div id="top"><input type=" ...

  3. jqGrid几个需要注意的默认设置

    jqGrid中的option属性设置中,几乎每个属性都会给出默认值,然而,有些默认值实在有些坑爹,导致在使用过程中,如果没有注意到而使用了默认值,就会出现一些问题. height:是指jqGrid表格 ...

  4. 从CSS实现正片叠底看=>混合模式mix-blend-mode

    兼容性:这个东西说多了也没意思,像HTML5和CSS3这种兼容性时刻变化的东东,我们最好在自己支持的设备上实验,不支持,就在想办法呗,这个东西就是为了方便和好玩 所有属性: mix-blend-mod ...

  5. WePayUI 快快尝鲜体验

    好久没有更新博客了... 时间真的很快~~~ 不废话了..干货会直接上~~~ WePayUI是什么 WePayUI 由微信支付为服务商和商户量身打造,用于快速制作符合微信支付规范的Web页面.WePa ...

  6. 开发培训及技术研讨会PPT下载链接

    8月到9月,我们做了一圈巡回演出,脚步踏遍祖国大江南北,包括沈阳.武汉.深圳.香港.上海和北京等几个城市,给大家带来Autodesk最新的云技术和桌面产品技术动态,得到了大家的热烈响应.感谢各位合作伙 ...

  7. Android Fragment使用(一) 基础篇 温故知新

    Fragment使用的基本知识点总结, 包括Fragment的添加, 参数传递和通信, 生命周期和各种操作. Fragment使用基础 Fragment添加 方法一: 布局里的标签 标识符: tag, ...

  8. 生成的API分析文件太大。我们无法在交付前验证您的API使用信息。这只是通知信息。

    这次使用了APICloud平台来开发移动APP, 发布的时候在api控制台云编译成ipa后,这次使用apple提供的Application Loader工具提交apa文件到iTunes上去,提交结束的 ...

  9. Android入门开发时注意的两个问题

    android开发中的问题: . 开发应用时要访问网络往往会忘记添加网络权限 <uses-permission android:name="android.permission.INT ...

  10. Android-正方形的容器

    package liu.myrecyleviewchoosephoto.view; import android.content.Context; import android.util.Attrib ...