Форум программистов, компьютерный форум CyberForum.ru

Передача ключей и значений - C++

Восстановить пароль Регистрация
 
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.12.2010, 17:27     Передача ключей и значений #1
Как корректно (в хорошем стиле) обрабатывать ключи и параметры передаваемые программе? Потому что ключей будет много (и хотелось бы что бы читающий код не сломал глаза.)

Если не затруднит на примере:
Bash
1
my_time -h Page
должно вывести справку, а
Bash
1
my_time -l
сответсвенно локальное время.
пример для редактирования
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<time.h>
 
void show_help();
void show_time();
 
int main()
{
    show_help();
    show_time();
 
return 0;
}
 
void show_help(){
    std::cout<<"This is help about Page"<<std::endl;
}
 
void show_time(){
  time_t t = time(NULL);
  std::cout<<asctime(localtime(&t))<<std::endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.12.2010, 22:57     Передача ключей и значений #2
boost :: program_options
man 3 getopt

самодельные
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct addrforms {
    char domain[MAXDOMAIN];
    char ip[MAXIP];
};
 
struct bitflags {
    unsigned int timeout : 1;
    unsigned int quiet : 1;
};
 
struct options {
    char *prog;
    
    struct addrforms address;
    long port;
    
    char ifname[MAXFILEPATH];
    char ofname[MAXFILEPATH];
    
    struct bitflags flags;
    int timeout;
};
 
int SetOptions(struct options *p, int argc, char *argv[]);
C
1
2
3
4
5
6
7
8
9
10
11
12
13
/* SearchForArg:  search arg in argv */
int SearchForArg(const char ***p, const char *arg,
                 const char **argv)
{
    while (*argv) {
        if (strcmp(arg, *argv) == 0) {
            *p = argv;
            return 0;
        }    
        argv++;
    }
    return -1;
}
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.12.2010, 23:55  [ТС]     Передача ключей и значений #3
Как раз то, что нужно. Общий принцип ясен, спасибо.

Не совсем очевиден порядок извлечения значений, вложите пожалуйста участок кода из SetOptions() в котором происходит получение, например ifname

то есть не понятно зачем используеться ***p, а не **p.

Добавлено через 15 минут
Всё - разобрался, ещё раз большое спасибо.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.12.2010, 02:58     Передача ключей и значений #4
поиск типа ./prog abc -t 10 def
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    char **argptr;
 
...
 
    /* search for -t nsec */
    
    retval = SearchForArg(
        (const char ***) &argptr,
        "-t",
        (const char **) argv
    );
    
    if (retval == 0) {
    
        tmp.flags.timeout = 1;
        
        tmp.timeout = atoi(argptr[1]);
        
        assert(tmp.timeout >= 0 && "timeout 0, 1, 2 ... ");
    
    }
    
    
    /* search for -i file */
    
    retval = SearchForArg(
        (const char ***) &argptr,
        "-i",
        (const char **) argv
    );
    
    if (retval == 0)
        strcpy(tmp.ifname, argptr[1]);
Yandex
Объявления
05.12.2010, 02:58     Передача ключей и значений
Ответ Создать тему
Опции темы

Текущее время: 12:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru