这里有一个关于如何使用 GNU 的例子getopt
。我了解大部分代码,但我有一些问题:
为什么包含 ctype lib?
我的意思
unistd.h
是需要getopt
,stdlib.h
需要abort
并且stdio.h
是io
.在默认情况下,我们为什么要使用 abort?我们不能只使用 return 1; 吗?
我希望有人分享一个链接,其中包含更多详细信息,
optopt
如果可能的话。optind
optarg
ctype
需要isprint()
main
函数中执行此操作,它可能会稍微有用,但打印错误然后调用exit(1)
可能会更好;我想这只是一个最小的例子,一行比两行短以下是您可能会发现有用的几个链接:
简单来说:
optopt
, optind
, 和optarg
是外部符号。它们是全局的,并在unistd.h
.
optopt
( opt
= option
) 通常不需要。它应该与调用返回的值相同getopt
。
optarg
( arg
= argument
) 很简单。这是一个标志的参数。例如,如果-f
是一个需要文件名参数(optstring
包含f:
)的选项,您可以执行类似的操作
case 'f':
filename = optarg;
break;
optind
(ind
意思是)告诉你选择过程在你的块index
结束后完成的地方。while (flag = getopt...)
例如,在添加选项处理之前,您的脚本可能如下所示
// print command line arguments, start at 1 to skip the program name
for (int i = 1; i < argc; i++) {
printf("arg[%d]=%s\n", i, argv[i]);
}
添加getopt
块以处理选项后,您可以执行
// print command line arguments remaining after option processing
for (int i = optind; i < argc; i++) {
printf("arg[%d]=%s\n", i, argv[i]);
}
或者
// skip command line options
argc -= optind; argv += optind;
// print command line arguments
for (int i = 0; i < argc; i++) {
printf("arg[%d]=%s\n", i, argv[i]);
}
如果您没有任何必需的命令行参数,那么您不必担心optind
.