技术标签: C
原文:https://www.gnu.org/software/libc/manual/html_node/Argp-Example-1.html#Argp-Example-1
argp 最小的例子。
#include <stdlib.h>
#include <argp.h>
int
main (int argc, char **argv)
{
argp_parse (0, argc, argv, 0, 0, 0);
exit (0);
}
结果:
$ ./args1 aaa
args1: Too many arguments
Try `args1 --help' or `args1 --usage' for more information.
$ ./args1 --help
Usage: args1 [OPTION...]
-?, --help Give this help list
--usage Give a short usage message
原文:https://www.gnu.org/software/libc/manual/html_node/Argp-Example-2.html#Argp-Example-2
本例还有一个“-- version”选项,根据 GNU 标准,该选项把以下程序中的 argp_program_version 和 argp_program_bug_address 显示在“-- help”输出中。
argp 包含了变量解析规范,是 argp_parse 的参数。
#include <stdlib.h>
#include <argp.h>
const char *argp_program_version =
"argp-ex2 1.0";
const char *argp_program_bug_address =
"<[email protected]>";
/* 程序说明 */
static char doc[] =
"Argp example #2 -- a pretty minimal program using argp";
/* 参数解析器。前三个参数 options, parser 和 args_doc 为 0,因为我们没有选项和参数 */
static struct argp argp = {
0, 0, 0, doc };
int
main (int argc, char **argv)
{
argp_parse (&argp, argc, argv, 0, 0, 0);
exit (0);
}
结果:
$ ./args2 --help
Usage: args2 [OPTION...]
Argp example #2 -- a pretty minimal program using argp
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Report bugs to <bug-gnu-[email protected].org>.
$ ./args2 --version
argp-ex2 1.0
./args2 -V
argp-ex2 1.0
原文:https://www.gnu.org/software/libc/manual/html_node/Argp-Example-3.html
本例增加了选项和参数。
以上,前四个字段最常用
error_t parser (int key, char *arg, struct argp_state *state)
#include <stdlib.h>
#include <argp.h>
const char *argp_program_version =
"argp-ex3 1.0";
const char *argp_program_bug_address =
"<[email protected]>";
/* 程序说明 */
static char doc[] =
"Argp example #3 -- a program with options and arguments using argp";
/* 参数说明 */
static char args_doc[] = "ARG1 ARG2";
/* 选项说明 */
static struct argp_option options[] = {
{
"verbose", 'v', 0, 0, "Produce verbose output" },
{
"quiet", 'q', 0, 0, "Don't produce any output" },
{
"silent", 's', 0, OPTION_ALIAS },
{
"output", 'o', "FILE", 0,
"Output to FILE instead of standard output" },
{
0 }
};
/* parse_opt 的参数 */
struct arguments
{
char *args[2]; /* arg1 & arg2 */
int silent, verbose;
char *output_file;
};
/* 选项解释 */
static error_t
parse_opt (int key, char *arg, struct argp_state *state)
{
/* 从 argp_parse 获取参数,该参数为 arguments 结构体 */
struct arguments *arguments = state->input;
switch (key)
{
case 'q': case 's':
arguments->silent = 1;
break;
case 'v':
arguments->verbose = 1;
break;
case 'o':
arguments->output_file = arg;
break;
case ARGP_KEY_ARG:
if (state->arg_num >= 2)
/* Too many arguments. */
argp_usage (state);
arguments->args[state->arg_num] = arg;
break;
case ARGP_KEY_END:
if (state->arg_num < 2)
/* Not enough arguments. */
argp_usage (state);
break;
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}
/* argp 解析器。argp_parse 的参数 */
static struct argp argp = {
options, parse_opt, args_doc, doc };
int
main (int argc, char **argv)
{
struct arguments arguments;
/* 默认值 */
arguments.silent = 0;
arguments.verbose = 0;
arguments.output_file = "-";
/* 解析 arguments;parse_opt 解析后的每个选项会反映在 arguments 中 */
argp_parse (&argp, argc, argv, 0, 0, &arguments);
printf ("ARG1 = %s\nARG2 = %s\nOUTPUT_FILE = %s\n"
"VERBOSE = %s\nSILENT = %s\n",
arguments.args[0], arguments.args[1],
arguments.output_file,
arguments.verbose ? "yes" : "no",
arguments.silent ? "yes" : "no");
exit (0);
}
结果:
$ ./args3 aa bb -v
ARG1 = aa
ARG2 = bb
OUTPUT_FILE = -
VERBOSE = yes
SILENT = no
$ ./args3 --help
Usage: args [OPTION...] ARG1 ARG2
Argp example #3 -- a program with options and arguments using argp
-o, --output=FILE Output to FILE instead of standard output
-q, -s, --quiet, --silent Don't produce any output
-v, --verbose Produce verbose output
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Report bugs to <bug-gnu-[email protected].org>.
$ ./args3 aa bb -o 1.txt
ARG1 = aa
ARG2 = bb
OUTPUT_FILE = 1.txt
VERBOSE = no
SILENT = no
Java语言程序设计与数据结构(基础篇)原书第11版 (美)梁勇(Y. Daniel Liang)著;戴开宇译. --北京:机械工业出版社
为什么80%的码农都做不了架构师?>>> ...
使用DefaultAdvisorAutoProxyCreator实现spring的自动代理 DefaultAdvisorAutoProxyCreator这个类功能更为强大,这个类的奇妙之处是他实现了BeanProcessor接口,当ApplicationContext读如所有的Bean配置信息后,这个类将扫描上下文,寻找所有的Advistor(一个Advisor是一个切入点和一个通知的组成
2019独角兽企业重金招聘Python工程师标准>>> ...
用于对一个文件进行CRC校验,以确保文件数据传输的正确性。废话不多说,直接上代码!crc32.h #ifndef CRC_32_H #define CRC_32_H #ifdef __cplusplus extern "C" { #endif void init_crc_table(void); unsign...
ios添加白名单打开应用的manifest.json文件,切换到代码视图,在plus -&gt; distribute -&gt; apple 下添加urlschemewhitelist节点,数据如下: "urlschemewhitelist":[ "baidumap", "iosamap"]数组中的字符串为要调用第三方app的urlscheme,最多可支持添加50...
(1)无边框化设计self.setWindowFlags(Qt.FramelessWindowHint)这句话加在self.setupUi(self)下面(2)设置style 加在__init__(self)内self.style = """ QPushButton{ color: #003300; border-top-right-rad...
使用leaflet请求GeoServer发布的WFS服务时,如果不是相同的域可能会出现如下问题:Failed to load http://192.168.0.126:8080/geoserver/ows?service=wfs&amp;version=1.0.0&amp;request=GetCapabilities: No 'Access-Control-Allow-Origin' heade...
这是一个简单的问题,可以使用下面的代码来解决:#include <stdio.h>int main() { int n, dmin, i; int a[n][n]; // 定义n*n的整型二维数组a // 初始化dmin为数组a的第一个元素 dmin = a[0][0]; // 遍历数组a的主对角线元素 for (i = 0; i < n; i...
在vue中封装了element-ui表格,然后使用插槽,fixed定位等,导致样式出现了错乱,以下提供几种错乱方式的解决方法1、线没有对齐在全局样式中写下这样的代码/* Element-UI 的table 组件出现表格线条不对齐的问题 */body .el-table th.gutter { display: table-cell !important}2、fixed固定导致的高度问题全局样式中写如下代码.el-table__fixed-right{ height: 10
iOS高级程序员进阶——Foundation核心数据类型原理 目前就职于中国...
&amp;lt; input &amp;gt;标签用法与功能全面解析&amp;lt; input &amp;gt; 标签规定用户可输入数据的输入字段。根据不同的 type 属性,输入字段有多种形态。输入字段可以是文本字段、复选框、密码字段、单选按钮、按钮等等。这是w3school官网最基础易懂的一段解析,但还有很多其他的用法与功能在我们写代码过程中会经常用到,下面就是我整理的一些关于该标签的其余用法。属性值描述...