Ich vermute einfach mal, dass du mit "void" eine Funktion oder einen Funktionspointer meinst, da es sonst wenig Sinn macht. Ferner nehme ich einfach mal C++ und nicht C an. Mit C ist das auch möglich, aber halt über Umwege und nicht so "schön", wie mit C++.
Standardmäßig gibt es eigentlich keine Information im Kompilat darüber, wie eine Funktion heißt, wenn sie nicht gerade exportiert wird.
Aber du könntest dieses Feature quasi selbst einzubauen, indem du beispielsweise eine std::map benutzt, welche den Funktionsnamen mit einem Pointer zu der Funktion verknüpft.
Sieht ca. so aus (könnte ggf. Fehler enthalten, hab den Code nur aus dem Kopf geschrieben und nicht getestet):
Code:
// functions
void PrintA() { std::cout << "A" << std::endl; }
void PrintB() { std::cout << "B" << std::endl; }
void PrintC() { std::cout << "C" << std::endl; }
std::map<std::string, void(*)()> functions{ {"FuncA", &PrintA}, {"FuncB", &PrintB}, {"C", &PrintC} };
...
std::string userInput;
// let user choose string
// make sure user enters a valid string ("A", "B" or "C") by checking with functions.find
functions[userInput](); // call functions
Wichtig ist, dass die Funktionen, die du in die Map tust eine einheitliche Signatur haben. Genauer gesagt wenigstens eine, die man einheitlich aufrufen kann, ohne das Programm zum Crash zu führen.
Die Map könnte natürlich auch zur Laufzeit noch verändert werden oder so, muss aber natürlich nicht. In letzterem Fall könnte man sie auch gleich const setzen.
Generell solltest du aber erstmal schauen, ob du's WIRKLICH brauchst, eine Funktion anhand ihres Namens aufzurufen und ob nicht vielleicht ein einfacher Funktionspointer, den man vielleicht zur Laufzeit ändert oder dergleichen, ausreicht.
Hoffe, ich konnte dir helfen

Jeoni