Ich habe die folgende Struktur. Ich muss überprüfen, ob eine bestimmte Datei die angegebene Funktion enthält. Wenn ja, muss ich es ausführen. Ich bin neu in C. Wie könnten wir diesenSo verwenden Sie Funktionszeiger, um auf Funktionen aus mehreren Dateien zuzugreifen
struct {
char *filename;
char *funcname;
int (*funcptr)();
} symtab[] = {
{ "filename1", "one_func", one_func },
{ "filename2", "two_func", two_func },
};
ich mit dem folgenden Code habe für Funktionen zu überprüfen, mit Funktionszeigern, ohne die Datei unter Berücksichtigung
int one_func(), two_func();
int (*findfunc(char *))();
struct {
char *name;
int (*funcptr)();
} symtab[] = {
{ "one_func", one_func },
{ "two_func", two_func },
};
int (*findfunc(char *name))()
{
int i;
for (i = 0; i < sizeof(symtab)/sizeof(symtab[0]); i++)
{
if (strcmp(name, symtab[i].name) == 0)
return symtab[i].funcptr;
}
puts("function not defined");
return NULL;
}
int one_func()
{
puts("one");
return 0;
}
int two_func()
{
puts("two");
return 0;
}
int main()
{
char *funcname = "two_func";
int (*funcp)() = findfunc(funcname);
if (funcp != NULL)
(*funcp)();
return 0;
}
Während der Laufzeit? Verwenden Sie shared libraries '.dll' auf Windows -> benutzen' loadlibrary' und Freunde, '.so' auf linux -> benutzen' dlopen' und Freunde. Beispiele auf wikipedia (aus irgendeinem Grund) https://en.wikipedia.org/wiki/Dynamic_loading – Lanting
Sieht aus wie ein [XY-Problem] (http://xyproblem.info/). Was versuchen Sie eigentlich? –
BTW: Bitte Code richtig einrücken. –