Hallo,
ich verwende seit längerem eine Funktion, welche einen Zeiger auf eine
andere Funktion übergeben bekommt und diesen Zeiger durch einfache
if-Abfragen vergleicht. Bisher hat es immer funktioniert.
Als Beispiel habe ich unten einen Codeschnippsel mit eingefügt.
Nun wollte ich eine weitere Funktions-/Zeigerabfrage einfügen (im
Beispiel die Funktion funk_2). Doch das Programm gab dann im laufenden
Betrieb immer "falsche Funktion" aus, kannte die Adresse vom Zeiger also
nicht.
Darauf hin habe ich einfach die Reihenfolge der Aufrufe von
und
vertauscht, und plötzlich ging es wieder.
Auch wenn ich die vertauschten Aufrufe nun wieder Rückgängig mache, geht
es wieder immer. (Rückgängig mit Strg-Z; war also definitiv kein
Tippfehler) Den Fehlerfall kann ich nun also nicht mehr reproduzieren.
Kann sich jemand diesen Fehler erklären? Habe ich Zeiger auf Funktionen
etwa falsch verstanden? Ich möchte ja nicht, dass der gleiche Fehler an
einer anderen Steller und völlig unerwartet erneut auftritt.
1 | void funk_1(void)
|
2 | {
|
3 | }
|
4 | void funk_2(void)
|
5 | {
|
6 | }
|
7 |
|
8 |
|
9 | // prüfe welcher Funktion-Zeiger übergeben wurde
|
10 | void check_funk( void(*testName) )
|
11 | {
|
12 | if (testName == funk_1)
|
13 | printf("es war funk_1");
|
14 |
|
15 | else if (testName == funk_2)
|
16 | printf("es war funk_2");
|
17 |
|
18 | else
|
19 | printf("falsche Funktion");
|
20 | }
|
21 |
|
22 | void main(void)
|
23 | {
|
24 | check_funk( funk_1 );
|
25 | check_funk( funk_2 );
|
26 | }
|