Seite 1 von 1

Zeiger auf Funktion

Verfasst: Mi Jun 24, 2009 6:31 pm
von darkangel
Hi
Ich suche momentan nach einer Möglichkeit, den Nutzer eines Programms durch Eingabe selbst bestimmen zu lassen, welche Funktion ausgeführt werden soll.
Jedoch habe ich keine Lust für jede, zur Verfügung stehende Funktion eine eigenes if zu setzen und die Eingabe mit den Funktionsnamen abzugleichen.

Ich dachte mir, ein pointer auf eine Funktion würde sich hierzu gut eignen, doch stehe ich nun leider vor einem Problem.

Da ich ja gerade erst bei dem Versuch bin, das Prinzip heraus zu finden, habe ich es einfach einmal so

Code: Alles auswählen


#include <stdio.h>

int test(int i)
{
	printf("%d",i);
	return 0;
}

int main() 
{
	int (*fct) (int a);
	char c[50];   
	fct=scanf("%s",c);
	(*fct)(1);
   

	return 0;
}
versucht.

Allerdings meldet mein Compiler dann : "Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung"
Bisher dachte ich, der Zeiger wäre bereits für Funktionen mit einem int-Rückgabewert geeignet.
Ich habe versucht es zu casten und habe die Zeile

Code: Alles auswählen

	fct=scanf("%s",c);
durch

Code: Alles auswählen

	fct=(int*)scanf("%s",c);
ersetzt, doch die nun wird mir gemeldet: "Warnung: Zuweisung von inkompatiblem Zeigertyp"

Könnte mir bitte jemand sagen, was genau ich falsch mache, oder mir einen anderen Ansatz vorstellen?

Re: Zeiger auf Funktion

Verfasst: Mi Jun 24, 2009 6:45 pm
von Dirty Oerti
Um ehrlich zu sein hab ich keine Ahnung, ob das, was du da tust überhaupt funktionieren kann.
Mit dem, was ich so weiß, würde ich nein sagen.

Ich präsentiere: Ein anderer Ansatz ;)

Du könntest dir ein Array aus Funktionszeigern anlegen, dass du mit Zeigern auf deine Funktionen füllst.
Jetzt gibst du dem Benutzer eine Liste aller Funktionen aus (die musst du trotzdem selber schreiben...), der Benutzer gibt die NUMMER der jeweiligen Funktion (Achtung, traue niemals dem Benutzer!) ein.
Diese Nummer bekommst du, und dann müsstest du über dein Array recht einfach darauf zugreifen können.

Re: Zeiger auf Funktion

Verfasst: Mi Jun 24, 2009 7:26 pm
von nufan
darkangel hat geschrieben:

Code: Alles auswählen

fct=scanf("%s",c);
scanf gibt die Anzahl der erfolgreich eingegebenen Elemente zurück, also ein int. Wenn das jetzt z.B. 3 sind hast du einen Pointer auf die Speicherstelle 3... Mal von den üblichen scanf-Problemen abgesehen.

Du versuchst doch den den Namen der Funktion einzugeben, oder? In Skriptsprachen geht das vielleicht, in C bzw. C++ hab ich so was noch nie gesehen. Ausgenommen du erstellst für jede Funktion eine Abfrage mit strcmp (). Am besten ist natürlich die von Dirty Oerti vorgeschlagene Array-Version. Weise jedem Arrayelement eine Funktion zu und lass den Benutzer den Index eingeben, dann brauchst du grade mal ein if um zu prüfen ob ein gültiger Index eingegeben wurde.