Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TigerClaw25

unregistriert

1

26.07.2017, 07:23

SDL 2.0 Sound

Guten Morgen,
ich möchte das SDL Spiel aus dem Buch im Sound erweitern. Dabei bin ich auf folgendes gestoßen: https://gist.github.com/armornick/3447121

Dazu habe ich ein paar Fragen. Warum wird folgende Zuweisung gemacht: "wav_spec.callback = my_audio_callback"? Ich kenne diese Art von Zuweisung nur von Funktionen, die einen Rückgabe wert haben,was hier nicht der Fall ist. Das zweite ist, dass die Funktion selbst eine Parameterliste hat. Die Funktion wird aber ohne Parameterliste aufgerufen. Kann mir jemand zu den beiden Fragen eine plausible Antwort mitteilen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

26.07.2017, 08:18

Das ist eine Zuweisung von Zeigern.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

26.07.2017, 09:30

Da wird ein Zeiger auf eine Funktion (Funktionszeiger) gesetzt, damit diese Funktion von der Library aufgerufen werden kann (Callback).

TigerClaw25

unregistriert

4

26.07.2017, 10:29

void my_audio_callback(void *userdata, Uint8 *stream, int len) -> die Funktion hat keinen Zeiger und die Parameter Liste fehlt auch .

Und was ist das der Unterschied zwischen diesem funktionszeiger http://www.willemer.de/informatik/cpp/fktzgr.htm und dem hier http://www.oopweb.com/CPP/Documents/Func…/FPT/m_fpt.html

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (26.07.2017, 10:34)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

26.07.2017, 10:48

void my_audio_callback(void *userdata, Uint8 *stream, int len) -> die Funktion hat keinen Zeiger und die Parameter Liste fehlt auch .

Wenn du einen Zeiger auf eine Funktion erstellst, schreibst du weder das & (kann man tun - es ist optional) noch die Parameterliste.

Und was ist das der Unterschied zwischen diesem funktionszeiger http://www.willemer.de/informatik/cpp/fktzgr.htm und dem hier http://www.oopweb.com/CPP/Documents/Func…/FPT/m_fpt.html

Da gibt's keinen Unterschied. An den Beispielen dort hättest du sehen müssen, dass man keine Parameterliste braucht. Dass das & nicht nötig ist, steht dort auch. Also warum liest du diese Artikel nicht?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

26.07.2017, 11:44

die Funktion hat keinen Zeiger
Der Funktionsname agiert wie ein Zeiger. Ich weiß, das klingt erstmal merkwürdig, aber wenn man drüber nachdenkt, dass ein Funktionsname lediglich eine Adresse beschreibt, ab der gewisser Code im Speicher liegt und dass eine Funktion einen gewissen Typ hat (nämlich basierend auf den Typen der Parameter und des Return-Typs) macht das plötzlich Sinn.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

7

26.07.2017, 11:56

Das verstehe ich. Aber wieso werden dann Funktion wie void *foo() definiert, während andere djrekt einem Zeiger zugewiesen werden, ohne das ein Sternchen steht?

Und das zweite ist, dass die Funktion von Typ void ist, wav_spec.callback jedoch vom Typ uint8.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (26.07.2017, 12:03)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

26.07.2017, 12:02

Void* ist der Rückgabetyp der Funktion. Der Funktionsname ist noch immer 'foo' und damit ist 'foo' auch noch immer ein Pointer, völlig unabgängig davon, was 'foo' zurück gibt. Bitte lies genau, was ich geschrieben habe. Funktion und Rückgabetyp sind unabhängig. Funktion und Rückgabetyp sind unabhängig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

9

26.07.2017, 12:04

Da steht bei der Deklaration der Funktion aber void foo und nicht void *foo, wie in vielen Büchern beschrieben wird.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

26.07.2017, 12:05

'void foo' liefert nichts zurück. 'void* foo' liefert einen Pointer auf einen undefinierten Datentyp. 'foo' ist die Funktion an sich und in jedem Fall ein Pointer, egal was.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige