【发布时间】:2020-11-23 13:11:33
【问题描述】:
我有一小段 C 代码,它接受一组命令行参数 --help、-h、-d 和 -o(每个对应代表“帮助”、“十六进制”、“十进制", "八进制"),我根据传递的参数调用某些函数,-h 将调用hexaFlag(),-dh 将调用hexaFlag() 和decFlag()。但是,为了做到这一点,我使用了一个混乱的if else 块。有没有更简单的方法来实现这一点?有人告诉我使用switch 语句,但考虑到我每次都检查不同的条件,我不知道如何在这里使用它。
main()我指的代码的函数:
int main(int argc, char* argv[]){
if(argc == 1){
printf("%s",usage());
printf("Use --help for more options.\n");
}
else if(strcmp(argv[1], "--help") == 0){
printf("%s", usage());
printf("Options are:\n -h = Hexadecimal values\n -d = Decimal values\n -o = Octal values\n --help = Shows this message\n");
}
else if(strchr(argv[1], '-') != NULL){
if(strchr(argv[1], 'h') != NULL){
hexaFlag(argc, argv);
}
if(strchr(argv[1], 'd') != NULL){
decFlag(2, argc, argv);
}
if(strchr(argv[1], 'o') != NULL){
octaFlag(argc, argv);
}
}
else {
decFlag(1, argc, argv);
}
return 0;
}
【问题讨论】:
-
你可以看看
getopt()和example ofgetopt()。 -
关于
getopt(以及您想要的getopt_long),有一些可移植的开源实现可以在您自己的代码中使用。如果您稍微搜索一下,还有 大量 其他库可以帮助解析命令行选项和参数。 -
首先,从
main中取出选项解析。在一个接受struct args *并设置其值的函数中进行所有解析。
标签: c if-statement switch-statement command-line-arguments