Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получить имя функции в виде string, не вызывая её (ANSI C) / 16 сообщений из 16, страница 1 из 1
03.09.2013, 07:58
    #38384872
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Собственно, есть массив указателей на функции. Есть сами функции (foo1, foo2, foo3). Пользователь вводит foo4, программа выдаёт: "Нет такой функции", пользователь вводит foo1/2/3 программа вызывает эту функцию. Как лучше сделать?
...
Рейтинг: 0 / 0
03.09.2013, 09:37
    #38384950
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301,

Код: plaintext
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.
#include <iostream>
#include <map>
#include <string>

void foo1() {
    std::cout << "foo1\n";
}
void foo2() {
    std::cout << "foo2\n";
}
void foo3() {
    std::cout << "foo3\n";
}

int main(int argv, char* argc[]) 
{
    typedef std::map<std::string, void (*)()> funcmap;
    funcmap m;
    m["foo1"] = foo1; 
    m["foo2"] = foo2; 
    m["foo3"] = foo3; 
    std::string f;
    std::cin >> f;
    funcmap::iterator i = m.find(f);
    if( i != m.end() ) {
        (*i->second)();
    } else {
        std::cerr << f << " не найдена";
    }
}
...
Рейтинг: 0 / 0
03.09.2013, 10:37
    #38385047
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Анатолий Широков, это на C++, а надо на C
...
Рейтинг: 0 / 0
03.09.2013, 10:52
    #38385074
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301,

а сам пробовал написать, что получилось?
...
Рейтинг: 0 / 0
03.09.2013, 11:00
    #38385102
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Изопропил,
фатальная ошибка: iostream: No such file or directory
...
Рейтинг: 0 / 0
03.09.2013, 11:16
    #38385134
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301iostream:
это тоже с++

fgets из <stdio.h> для С
...
Рейтинг: 0 / 0
03.09.2013, 11:18
    #38385137
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301Анатолий Широков, это на C++, а надо на C


Используй тот же принцип и перепиши на C.
...
Рейтинг: 0 / 0
03.09.2013, 11:32
    #38385164
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Изопропил, не поймите меня неправильно. Когда вы запускаете консольное приложение, например cmd.exe, вы пишете в нём определенные команды. Программа сверяется со списком всех команд, если есть - вызывает определенную функцию, если нет - пишет, что такой команды не существует. Команды в моей программе для простоты совпадают с именами функций (чтобы можно было if(gets(input) == funcname){ ... }). В гугле я ничего не нашел, нашел только про __func__, но он дает имя текущей функции, т.е. мне, для того, чтобы узнать её имя нужно будет её вызвать. А если у меня 100/10000/100000 функций, мне что, каждую из них вызывать?

Мои предложения:
1.
Код: plaintext
1.
2.
3.
4.
5.
6.
const char* foo(bool who_am_i, ...){
const char* result;
if(who_am_i){
return result = __func__;}
else{
dowork;}


Это не подходит, потому что у каждой функции возвращаемый тип будет const char*

2. Здесь
...
Рейтинг: 0 / 0
03.09.2013, 12:08
    #38385231
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
1)не надо использовать gets , fgets используй иначе переполнение буфера может случиться
2 строки сравнивай strcmp
3) табличку завести придётся типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
typedef void   (*t_func)();
typedef struct  {
	char * fname;
	t_func cmd;
} Cmd ;

Cmd clist[]={{"cmd1",cmd1},{"cmd2",cmd2},{"cmd3",cmd3},{0,0}};
...
Рейтинг: 0 / 0
03.09.2013, 12:25
    #38385253
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Изопропил, как вы считаете, что будет проще новичку: ваш способ, или вот это ?
...
Рейтинг: 0 / 0
03.09.2013, 12:55
    #38385300
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301,

новичку нужно освоить основы - ввод текста, сравнение строк, поиск в массиве и т д
...
Рейтинг: 0 / 0
03.09.2013, 13:13
    #38385329
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Изопропил, fgets() же для файлов вроде как
...
Рейтинг: 0 / 0
03.09.2013, 13:18
    #38385338
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301Изопропил, fgets() же для файлов вроде как
stdin - один из них
...
Рейтинг: 0 / 0
03.09.2013, 13:28
    #38385357
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301как вы считаете, что будет проще новичку: ваш способ, или вот это

Способ Изопропила однозначно проще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.09.2013, 14:30
    #38385476
Inkelyad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301Изопропил, как вы считаете, что будет проще новичку: ваш способ, или вот это ?
А еще лучше вот этим
Названия же на этапе компиляции известны.
...
Рейтинг: 0 / 0
05.09.2013, 11:58
    #38387648
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить имя функции в виде string, не вызывая её (ANSI C)
Prime301,

man backtrace_symbols
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получить имя функции в виде string, не вызывая её (ANSI C) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]