Funktionszeiger

Gast #1230037
Lesenswert?
• ▲
▼
In meinem Programm wird es einige Funktionen geben, die neben dem 
normalen Funktionsaufruf auch noch durch eine spezielle Funktion 
aufgerufen werden sollen. Diese Funktion hat einen "int" Parameter, der 
die Nummer der Funktion angibt. Mithilfe eines switch-case Blockes würde 
sich das erledigen lassen. Jedoch denke ich dass ein Array aus 
Funktionszeiger schneller zum Ziel führt. Aber wie bekomme ich ein 
solches Array am bessten initalisiert?
#1230079
Lesenswert?
• ▲
▼
Klaus3 wrote:
> die Nummer der Funktion angibt. Mithilfe eines switch-case Blockes würde
> sich das erledigen lassen. Jedoch denke ich dass ein Array aus
> Funktionszeiger schneller zum Ziel führt.

Man sollte den Compiler nicht unterschätzen. Der kriegt ziemlich gut 
raus, ab wann ne Sprungtabelle schneller ist und nimmt sie dann.


Peter
Gast #1230104
Lesenswert?
• ▲
▼
Ich hatte zuvor die Übergabe der Aufzurufenden Funktion per Zeiger auf 
diese Funktion. Eine switch-case Struktur führt zu definitiv viel mehr 
Code was sich nicht erklären lässt wenn man bedenkt dass nun nur noch 
8-Bit Werte übergeben werden müssen. Ich vermute momentan dass vom 
Compiler diese switch-case Struktur (momentan ca 15 Einträge) nicht 
erkannt, oder nicht optimiert wird.
Gast #1266942
Lesenswert?
• ▲
▼
1
typedef void (*pFunc)(int); 
2

3
void Func1(int);
4
void Func2(int);
5

6
pFunc Arr[2] = {Func1, Func2};
7

8
void Func1(int a) 
9
{ 
10
    //... 
11
} 
12
void Func2(int a) 
13
{     
14
    //... 
15
}

Aber wie findet nun der eigentliche Funktionsaufruf statt?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren