En C, getopt_long no analiza los argumentos opcionales para los parámetros de línea de comando.getopt no analiza argumentos opcionales para los parámetros
Cuando ejecuto el programa, el argumento opcional no se reconoce como el ejemplo que se muestra a continuación.
$ ./respond --praise John
Kudos to John
$ ./respond --blame John
You suck !
$ ./respond --blame
You suck !
Aquí está el código de prueba.
#include <stdio.h>
#include <getopt.h>
int main(int argc, char ** argv)
{
int getopt_ret, option_index;
static struct option long_options[] = {
{"praise", required_argument, 0, 'p'},
{"blame", optional_argument, 0, 'b'},
{0, 0, 0, 0} };
while (1) {
getopt_ret = getopt_long(argc, argv, "p:b::",
long_options, &option_index);
if (getopt_ret == -1) break;
switch(getopt_ret)
{
case 0: break;
case 'p':
printf("Kudos to %s\n", optarg); break;
case 'b':
printf("You suck ");
if (optarg)
printf (", %s!\n", optarg);
else
printf ("!\n", optarg);
break;
case '?':
printf("Unknown option\n"); break;
}
}
return 0;
}
Estoy documentando esto aquí con la respuesta, para que otras personas no tengan que golpearse la cabeza contra la pared. – hayalci