Forum: PC-Programmierung c typedef void pointer problem


von zeus (Gast)


Lesenswert?

Hallo !

kann mir bitte jemand diese C code zeile erklären ?

typedef void (*timer_expiry_cb_t)(void *);

danke voraus!

von Simon B. (nomis)


Lesenswert?

zeus schrieb:
> Hallo !
>
> kann mir bitte jemand diese C code zeile erklären ?
>
> typedef void (*timer_expiry_cb_t)(void *);
>
> danke voraus!

Das beschreibt den Typ einer Funktion, welche einen void-Pointer als 
Argument entgegennimmt und keine Rückgabe liefert. Dieser Typ kann im 
Folgenden als "timer_expiry_cb_t" benannt werden.

Viele Grüße,
        Simon

von Mark B. (markbrandis)


Lesenswert?

Eine Zeigerfunktion, die keinen Rückgabewert liefert und als Parameter 
einen typlosen Zeiger erwartet. Das Ganze als Typdefinition zur 
leichteren Verwendbarkeit.

von Marius W. (mw1987)


Lesenswert?

Das ist ein Funktionszeiger auf eine Funktion, die nichts zurückgibt, 
aber einen (beliebigen) Pointer als Argument akzeptiert.

MfG
Marius

von Mark B. (markbrandis)


Lesenswert?

Ninja'd! ;-)

Bei der Antwortgeschindigkeit hier frage ich mich echt manchmal, ob 
nicht ein Dutzend Personen im Forum immer auf "Refresh" klickt und sich 
sofort auf solche Fragen stürzt... :-)

von Simon B. (nomis)


Lesenswert?

Mark Brandis schrieb:
> Ninja'd! ;-)

Heh, ich bin ja durchaus erleichtert, dass wir uns wenigstens einig sind 
:)

Viele Grüße,
        Simon

von (unknown) (Gast)


Lesenswert?

Danke erstmal für die schnelle antworten.

soweit ich verstanden hab da es ein typedef ist kann ich es wie folg 
verwenden:
1
typedef void (*timer_expiry_cb_t)(void *);
2
3
timer_expiry_cb_t callback; // --> d.h. void (*callback) (void *);
4
callback = funktion1; 
5
(*callback)(&var1); // die funktion1 wird mit der adresse von var1 aufgerufen.

stimmt das?

von (prx) A. K. (prx)


Lesenswert?

(unknown) schrieb:

> soweit ich verstanden hab da es ein typedef ist kann ich es wie folg
> verwenden:

Ja. Aber
  callback = function;
  callback(&var1);
tut es auch und entspricht dem Ursprung der Sprache, während
  callback = &function;
  (*callback)(&var1)
als Konzession an Nutzer hinzu kam, die von einem Funktionsnamen als 
implizitem Pointer und dem () Operator als Aufruf über einen Pointer 
irritiert waren. Daher ist
  callback = function;
  (*callback)(&var1)
ein inkonsistenter Hybrid aus beiden Varianten.

von (unknown) (Gast)


Lesenswert?

Danke erstmal ;)

von Rolf Magnus (Gast)


Lesenswert?

Man kann sogar schreiben
1
callback = *********function;
2
(**********callback)(&var1);

Bei Funktionen und deren Aufruf sind Dereferenzierungen beliebig oft 
machbar, und es kommt immer das gleiche raus.

von Klaus W. (mfgkw)


Lesenswert?

... und die Anzahl der Sternchen muß dann nicht gleich sein in den 
beiden Zeilen.

Sehr gute Idee, werde ich hier gleich mal irgendwo unterbringen!

von Mark B. (markbrandis)


Lesenswert?

Klaus Wachtler schrieb:
> ... und die Anzahl der Sternchen muß dann nicht gleich sein in den
> beiden Zeilen.
>
> Sehr gute Idee, werde ich hier gleich mal irgendwo unterbringen!

Warum um alles in der Welt sollte man sowas machen wollen? Es sei denn 
natürlich, man nähme am IOCCC teil - wenn es ihn noch geben würde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.