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 '-'?