C Getopts:管理所有接收到的选项和可选的optargs
C Getopts: Managing all received options and optional optargs
我正在编写一个程序,该程序应该有最多 3 个选项,同时它们也可以组合。该部分如下所示:
char flag = 0; // to mark which options were set
int aopt = INT_MAX; // default to INT_MAX if no args delivered
char bemerkung[100];
memset(bemerkung, '[=10=]', 100); // string to receive via '-b'
char option;
while((option = getopt (argc, argv, "m:a:b:")) != EOF){
switch( option ){
case 'm': {
flag = flag | 1;
break;
}
case 'a': {
flag = flag | 2;
char * arg = optarg;
aopt = atoi(arg);
if(aopt == 0 && strcmp("0", arg) != 0) // if no valid optarg was entered
aopt = INT_MAX; // get back the default value
break;
}
case 'b': {
flag = flag | 4;
strcpy(bemerkung, optarg);
break;
}
default: {
fprintf(stderr, "Unknown option entered.\n");
return -1;
}
}
}
// some code here, not touching `flag`
if(flag == 1){
// deal with `-m`, no optargs
}
if(flag == 2){
// `-a aopt` called
}
if(flag == 3){
// `-m -a aopt` called
}
基本思路是设置 flag
中的位,以便我稍后可以处理选项及其组合。但我现在面临的问题是 -m
需要参数(对于 -m
应该是可选的)并且 ./main -m -a 0
结果为 flag = 1
而不是 flag = 3
.
如何使 -m
的参数可选并使 OR
为 flag
正确完成?
如果您希望 -m
不接受任何参数,则在选项字符串中省略它后面的 :
。 :
表示前面的选项需要一个参数:
while((option = getopt (argc, argv, "ma:b:")) != EOF){
我正在编写一个程序,该程序应该有最多 3 个选项,同时它们也可以组合。该部分如下所示:
char flag = 0; // to mark which options were set
int aopt = INT_MAX; // default to INT_MAX if no args delivered
char bemerkung[100];
memset(bemerkung, '[=10=]', 100); // string to receive via '-b'
char option;
while((option = getopt (argc, argv, "m:a:b:")) != EOF){
switch( option ){
case 'm': {
flag = flag | 1;
break;
}
case 'a': {
flag = flag | 2;
char * arg = optarg;
aopt = atoi(arg);
if(aopt == 0 && strcmp("0", arg) != 0) // if no valid optarg was entered
aopt = INT_MAX; // get back the default value
break;
}
case 'b': {
flag = flag | 4;
strcpy(bemerkung, optarg);
break;
}
default: {
fprintf(stderr, "Unknown option entered.\n");
return -1;
}
}
}
// some code here, not touching `flag`
if(flag == 1){
// deal with `-m`, no optargs
}
if(flag == 2){
// `-a aopt` called
}
if(flag == 3){
// `-m -a aopt` called
}
基本思路是设置 flag
中的位,以便我稍后可以处理选项及其组合。但我现在面临的问题是 -m
需要参数(对于 -m
应该是可选的)并且 ./main -m -a 0
结果为 flag = 1
而不是 flag = 3
.
如何使 -m
的参数可选并使 OR
为 flag
正确完成?
如果您希望 -m
不接受任何参数,则在选项字符串中省略它后面的 :
。 :
表示前面的选项需要一个参数:
while((option = getopt (argc, argv, "ma:b:")) != EOF){