I have a program which takes various command line arguments. For the sake of simplification, we will say it takes 3 flags, -a
, -b
, and -c
, and use the following code to parse my arguments:
int c;
while((c = getopt(argc, argv, ":a:b:c")) != EOF)
{
switch (c)
{
case 'a':
cout << optarg << endl;
break;
case 'b':
cout << optarg << endl;
break;
case ':':
cerr << "Missing option." << endl;
exit(1);
break;
}
}
note: a, and b take parameters after the flag.
But I run into an issue if I invoke my program say with
./myprog -a -b parameterForB
where I forgot parameterForA, the parameterForA (represented by optarg) is returned as -b
and parameterForB is considered an option with no parameter and optind is set to the index of parameterForB in argv.
The desired behavior in this situation would be that ':'
is returned after no argument is found for -a
, and Missing option.
is printed to standard error. However, that only occurs in the event that -a
is the last parameter passed into the program.
I guess the question is: is there a way to make getopt()
assume that no options will begin with -
?