Funktionszeiger-Deklarationen

04/01/2010 - 19:20 von Rainer Weikusat | Report spam
Ich bitte um Entschuldigung, falls das eine vollkommen offensichtliche
Loesung hat, fuer die ich im Moment zu vernagelt bin, aber wie
deklariert man eigentlich einen Zeiger auf eine Funktion, die einen
Zeiger auf eine Funktion gleichen Typs als Argument uebernimmt?

Der offensichtliche Workaround ware

struct blah;

typedef int some_function(struct blah *);

struct blah {
some_function *blubb;
};

?
 

Lesen sie die antworten

#1 Alexander Bartolich
04/01/2010 - 20:05 | Warnen spam
Rainer Weikusat schrieb:
Ich bitte um Entschuldigung, falls das eine vollkommen offensichtliche
Loesung hat, fuer die ich im Moment zu vernagelt bin, aber wie
deklariert man eigentlich einen Zeiger auf eine Funktion, die einen
Zeiger auf eine Funktion gleichen Typs als Argument uebernimmt?



Ist meines Wissens nicht möglich.

Der offensichtliche Workaround ware [...]



Ja, in modernem C ist "struct" die einzige Möglichkeit, zyklische Typ-
graphen abzubilden. In der guten, alten Zeit gab konnte man zumindest
noch eine Funktion definieren, die einen Zeiger auf sich selbst als
Parameter akzeptierte.

$ nl -ba a.c
1 #include <stdio.h>
2
3 int loop_to_0(number, func)
4 int number;
5 int func(number, func);
6 {
7 printf("%2d", number);
8 return (number == 0) ? number : func(number - 1, func);
9 }
10
11 int main()
12 {
13 loop_to_0(7, loop_to_0);
14 return 0;
15 }

$ gcc -Wall a.c && ./a.out
a.c: In function 'loop_to_0':
a.c:5: warning: parameter names (without types) in function declaration
7
6
5
4
3
2
1
0

Lass die Leute reden und làchle einfach mild,
Die meisten Leute haben ihre Bildung aus der Bild.
Und die besteht nun mal, wer wüsste das nicht,
aus: Angst, Hass, Titten und dem Wetterbericht!

Ähnliche fragen