powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получить имя функции в виде string, не вызывая её (ANSI C)
16 сообщений из 16, страница 1 из 1
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38384872
Prime301
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, есть массив указателей на функции. Есть сами функции (foo1, foo2, foo3). Пользователь вводит foo4, программа выдаёт: "Нет такой функции", пользователь вводит foo1/2/3 программа вызывает эту функцию. Как лучше сделать?
...
Рейтинг: 0 / 0
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38384950
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385047
Prime301
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широков, это на C++, а надо на C
...
Рейтинг: 0 / 0
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385074
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prime301,

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

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


Используй тот же принцип и перепиши на C.
...
Рейтинг: 0 / 0
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385164
Prime301
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил, не поймите меня неправильно. Когда вы запускаете консольное приложение, например 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
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385231
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385253
Prime301
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил, как вы считаете, что будет проще новичку: ваш способ, или вот это ?
...
Рейтинг: 0 / 0
Получить имя функции в виде string, не вызывая её (ANSI C)
    #38385300
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prime301,

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

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

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


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