【发布时间】:2017-12-06 02:28:11
【问题描述】:
我正在尝试使 getopt 可以处理某些标志,但是我在使用 getopt 实现错误处理时遇到了麻烦。我想防止重复的标志,例如'-s 1 -s 1',并且标志'-s 1 2'的参数过多,这两者都应该退出程序。
int opt; //command flags
while((opt = getopt(argc, argv, "s:f:")) != -1){
switch(opt){
case 's':
printf("%s\n", optarg);
printf("%i\n", optind);
break;
case 'f':
printf("%s\n", optarg);
printf("%i\n", optind);
break;
default:
//unknown command flags
fprintf(stderr, "Usage: fred [ -s symbol-table-file ] [ -f fred-program-file ]\n");
return EXIT_FAILURE;
}
}
参数过多(例如,程序 -s f1 -f f2 hello)。重复的标志(例如,程序 -s f1 -s f2)。两者都应该退出程序
【问题讨论】:
-
额外的参数必须在循环后检测;它将显示为“未使用”参数,
optind < argc将在循环退出时保持不变。重复的参数在循环之前需要int sflag = 0;,在case 's':代码中需要if (sflag++ > 0) { …chastise user and exit… }。
标签: c error-handling getopt