Идентификация параметра c ++ getopt () - PullRequest
0 голосов
/ 13 мая 2018

Привет, я тестирую программу по умолчанию getopt(), которую можно найти здесь .

Когда я запускаю этот код и набираю, например, myProgram -c -b. -c, в качестве параметра принимается -b. Как я понял, читая о getopt(), символы, начинающиеся с -, рассматриваются как особый случай. Могу ли я получить getopt() вместо -b в качестве параметра для -c запустить -c без аргумента, а затем -b вместо?

while ((c = getopt(argc, argv, "abc:")) != -1) 
    {
    char test = 111;
    std::cout << test << std::endl;
    switch (c) {
    case 'a':
        aflag = 1; break;
    case 'b':
        bflag = 1; break;
    case 'c':
    {
        cvalue = optarg;
        break;
    }
    case '?':
        if (isprint(optopt))
        {
            fprintf(stderr, "Unknown option `-%c'.\n", optopt);
        }
        else
            fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
        return 1;
    default:
        abort();
    }

1 Ответ

0 голосов
/ 13 мая 2018

Ваша опция spec "abc:" имеет двоеточие : сразу после опции c, сообщающей getopt, что -c в командной строке требуется аргумент. Тот факт, что приведенный аргумент -b не имеет значения - он равен аргументу.

GNU реализация getopt позволяет указать, что аргумент является необязательным, указав вместо него двойное двоеточие ::.

Итак, вместо этого, попробуйте (не проверено) ...

while ((c = getopt(argc, argv, "abc::")) != -1) {
...