什么是Argtable

Argtable是一款开源的ANSI C library,用来解析GNU样式的命令行选项。它通过定义可用于指定命令行语法的声明式API,从而简化了命令行的分析。argtable将自动生成一致的错误处理逻辑和命令行语法的文本描述,这对于一个健壮的cli程序来说,是非常必要的,但是很繁琐。例如要创建一个如下所示的cli程序:

$> util.exe --help
Usage: util.exe [-v] [--help] [--version] [--level=<n>] [-o myfile] <file> [<file>]...
Demonstrate command-line parsing in argtable3.--help                    display this help and exit--version                 display version information and exit--level=<n>               foo value-v, --verbose             verbose output-o myfile                 output file<file>                    input files

你可以使用以下代码段中的argtable实现命令行的分析逻辑:

#include "argtable3.h"/* global arg_xxx structs */
struct arg_lit *verb, *help, *version;
struct arg_int *level;
struct arg_file *o, *file;
struct arg_end *end;int main(int argc, char *argv[])
{/* the global arg_xxx structs are initialised within the argtable */void *argtable[] = {help    = arg_litn(NULL, "help", 0, 1, "display this help and exit"),version = arg_litn(NULL, "version", 0, 1, "display version info and exit"),level   = arg_intn(NULL, "level", "<n>", 0, 1, "foo value"),verb    = arg_litn("v", "verbose", 0, 1, "verbose output"),o       = arg_filen("o", NULL, "myfile", 0, 1, "output file"),file    = arg_filen(NULL, NULL, "<file>", 1, 100, "input files"),end     = arg_end(20),};int exitcode = 0;char progname[] = "util.exe";int nerrors;nerrors = arg_parse(argc,argv,argtable);/* special case: '--help' takes precedence over error reporting */if (help->count > 0){printf("Usage: %s", progname);arg_print_syntax(stdout, argtable, "\n");printf("Demonstrate command-line parsing in argtable3.\n\n");arg_print_glossary(stdout, argtable, "  %-25s %s\n");exitcode = 0;goto exit;}/* If the parser returned any errors then display them and exit */if (nerrors > 0){/* Display the error details contained in the arg_end struct.*/arg_print_errors(stdout, end, progname);printf("Try '%s --help' for more information.\n", progname);exitcode = 1;goto exit;}exit:/* deallocate each non-null entry in argtable[] */arg_freetable(argtable, sizeof(argtable) / sizeof(argtable[0]));return exitcode;
}

一些特征

以下列出了一些为什么你应该在你的C/C++ 工具箱中包含Argtable的原因:

  • GNU-style command-line syntax: 使用标准和跨平台的方式来表达命令.
  • Declarative API: 通过指定具体的、非详细说明如何做的方式来排除复杂的解析逻辑.
  • Built-in error handling: 生成一致的错误处理逻辑.
  • Built-in help messages: 生成一致的命令行语法描述.
  • Written in ANSI C: 易于被其他语言创建绑定.
  • Readable source code: 源码注释良好,具有100%的分支测试覆盖率.
  • Single-file library: 没有繁琐的构建脚本。只需要将单个源文件放到你的项目中即可.
  • Self-contained: 没有外部依赖.
  • Cross-platform: 在大多数类Unix系统、Windows和嵌入式系统上都可以使用.
  • BSD-licensed:可以将此库用于任何目的,包括商业程序.

下一步

如果你想学习如何使用argtable3,可以从教程开始。如果你想从示例中学习,可以检查存储库中的示例程序列表。如果您发现文档或者代码有任何问题,可以将问题发送提交到Github项目页面。

在云计算时代,cli程序变得越来越重要。我们希望argtable能够促进cli的复兴,有助于让开发人员和用户的生活变得更轻松。

注意:这个网站是针对最新的argtable v3 系列的,该系列源自Stewart Heitmann创建的argtable V2系列,argtable3不向后兼容。因此,如果要使用argtable2 api,必须转到argtable2网站,并从其sourceforge.net 项目中获得源码。

Argtable学习(1)相关推荐

  1. Argtable3 学习(2)--教程

    Introduction of Argtable3 解析程序的命令行一直以来都是一个分散注意力的主要编程任务.Argtable3 库通过允许程序员将源代码中的命令行选项直接定义为静态的结构数组来简化作 ...

  2. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  3. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  4. FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器

    文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...

  5. FastAI 课程学习笔记 lesson 1:宠物图片分类

    文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...

  6. 深度学习学习指南-工具篇

    colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...

  7. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  8. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

  9. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

最新文章

  1. 基于Teamplate Workflow组件的工组流开发概述
  2. redis中的string
  3. 基于MATLAB均值漂移图像分割技术
  4. session and cookie
  5. 又发生频繁FGC,这次是谁的锅
  6. bootstrap到底是用来做什么的(概念)
  7. 修改系统默认路径,如收藏夹、桌面、我的文档
  8. 修改Tomcat欢迎界面为自己项目界面
  9. R语言绘图--PCA图
  10. 查计算机主板,如何查看计算机主板的型号
  11. MapReduce各个执行阶段
  12. 9.3. debug ip igrp
  13. JS,VUE检测Video视频是否全屏播放
  14. viewerjs 在html打开图片或打开pdf文件使用案例
  15. 华科再次拿下华为“天才少年”最高薪!201万给到通信应届博士生
  16. 全国计算机应用基础统考成绩查询,2020年12月网络教育统考成绩查询时间及入口...
  17. 【渝粤教育】国家开放大学2019年春季 1192高层建筑施工 参考试题
  18. 【上电即上华为云】华为云openCPU智联模组_Cat.1_MC615-CN-L610-CN_环境温湿度(GXHT30传感器)
  19. php邮箱登录,phpcms邮箱登录(手机号登录可参考)
  20. 推荐系统读书笔记(二)利用用户行为数据

热门文章

  1. 计算机专业的当老师选语文还是英语,当老师选什么考研专业
  2. 架构师必看:谈软件架构师如何做好架构设计(上)
  3. 跟陈皓一起学makefile
  4. 屏幕适配android
  5. 金融学习之十四——使用Tushare获取数据计算投资组合的预期收益率和波动率
  6. js控制html页面自动滑到底部
  7. smarty教程系列2-section2
  8. R-4- 医学预测分析
  9. java getpath()_Java File getAbsolutePath()方法
  10. 0基础学习网页结构编程