Hallo ! kann mir bitte jemand diese C code zeile erklären ? typedef void (*timer_expiry_cb_t)(void *); danke voraus!
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
Eine Zeigerfunktion, die keinen Rückgabewert liefert und als Parameter einen typlosen Zeiger erwartet. Das Ganze als Typdefinition zur leichteren Verwendbarkeit.
Das ist ein Funktionszeiger auf eine Funktion, die nichts zurückgibt, aber einen (beliebigen) Pointer als Argument akzeptiert. MfG Marius
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... :-)
Mark Brandis schrieb: > Ninja'd! ;-) Heh, ich bin ja durchaus erleichtert, dass wir uns wenigstens einig sind :) Viele Grüße, Simon
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?
(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.
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.
... und die Anzahl der Sternchen muß dann nicht gleich sein in den beiden Zeilen. Sehr gute Idee, werde ich hier gleich mal irgendwo unterbringen!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.