Hallo, welche Vorteile/Nachteile haben Funktionspointer in einem Struct (in C). Ich wusste bisher gar nicht, dass so etwas geht. Claus
Stichwort: Virtual function table / vtable. In manchen Fällen ganz nützlich. Im Extremfall kann man damit auch echte objektorientierte Programmierung in C betreiben.
:
Bearbeitet durch User
Nachteil speziell für embedded: der Stackbedarf geht dann nicht mehr mit dem statischen Calltree zu ermitteln.
Bis auf die standardmäßige Sichtbarkeit der Elemente unterscheiden sich class und struct nicht. Insofern entsprechen die Funktionspointer im struct virtuellen Methoden einer Klasse, mit der Einschränkung dass "this" als zusätzliches Argument ausgeführt werden müßte. Häufig nützlich um in C Komponenten zu entkoppeln: Also wenn man z.B. ein Modul B nicht fest mit einem Modul A koppeln möchte, indem aus B direkt die Funktionen von A aufgerufen werden. Das struct definiert dann die geforderte Schnittstelle von B.
Claus schrieb: > welche Vorteile/Nachteile haben Funktionspointer in einem Struct (in C). Vor- und Nachteile im Vergleich zu was? > Ich wusste bisher gar nicht, dass so etwas geht. Warum sollte das nicht gehen? Jeder vollständige Typ kann Element einer struct sein.
Claus schrieb: > welche Vorteile/Nachteile haben Funktionspointer in einem Struct (in C). > Ich wusste bisher gar nicht, dass so etwas geht. Structs fassen Element zusammen, die zusammen gehören. Sinnvoll ist das um - Funktionen und Daten - verschiedene Funktionen eines Moduls oder eines Datentyps zusammen zu fassen Nop schrieb: > Nachteil speziell für embedded: der Stackbedarf geht dann nicht mehr mit > dem statischen Calltree zu ermitteln. Das hat aber nichts damit zu tun, ob fPointer in Structs oder Arrays gruppiert werden.
Walter T. schrieb: > Im Extremfall kann man damit auch echte objektorientierte Programmierung > in C betreiben. x^2 schrieb: > Bis auf die standardmäßige Sichtbarkeit der Elemente unterscheiden sich > class und struct nicht. Insofern entsprechen die Funktionspointer im > struct virtuellen Methoden einer Klasse Das ist wieder einmal totaler Blödsch....! Einen Funktionspointer musst du bei/nach der Instanzierung initialisieren. Bei Methoden kümmert sich dein Tool darum. Das weiss auch nach mehrfachen Vererbungen, was zusammen gehört. Auch verwaltet es die virtuellen Mehtoden und kann über ein und denselben Pointer unterschiedliche Objekte und deren virtuelle Methoden zusammen würfeln. Habt ihr OOP überhaupt verstanden?
MaWin schrieb: > Auch verwaltet es > die virtuellen Mehtoden Ja, VMT zur Laufzeit, für die Klugsch...
MaWin schrieb: > Das ist wieder einmal totaler Blödsch....! Es geht hier ausdrücklich um C, nicht um C++. Steht es zur Verfügung, ist C++ der meist bessere Weg. MaWin schrieb: > Ja, VMT zur Laufzeit, für die Klugsch... C++ macht da auch viel zur Laufzeit. Sieht man nur nicht. Das obige Schema lässt sich auch locker mit einer VMT erweitern, um die Initialisierungen zu reduzieren. Oder indem man die Objekte aus einem statischen Template kopiert.
:
Bearbeitet durch User
A. K. schrieb: > Es geht hier ausdrücklich um C, nicht um C++. Es wurde von OOP gesprochen. Und darauf beziehe ich mich. Die Jungs haben Nonsens gesch...
A. K. schrieb: > Das obige > Schema lässt sich auch locker mit einer VMT erweitern Zeig' bitte mal was Lockeres. Ich bin gespannt, wie locker du hier ein C Beispiel mit einer funktionierenden VMT einstellst. Auf geht 's! Oder bist du nur ein sprüchklopfendes Großmaul?
MaWin schrieb: > Oder bist du nur ein sprüchklopfendes Großmaul? Hab keine Lust auf diesen Stil, egal wie du mich nennst. Von Compilern hatte ich mal etwas Ahnung, bissel was ist davon noch übrig geblieben.
:
Bearbeitet durch User
A. K. schrieb: > Ahnung Na was jetzt? Große Ankündigung und nun kneifen! Wo ist das lockere Beispiel? Es geht wohl nicht so locker? Natürlich nicht, C ist keine OOP-taugliche Sprache!
MaWin schrieb: > Das ist wieder einmal totaler Blödsch....! > > Einen Funktionspointer musst du bei/nach der Instanzierung > initialisieren. Bei Methoden kümmert sich dein Tool darum. Das weiss > auch nach mehrfachen Vererbungen, was zusammen gehört. Auch verwaltet es > die virtuellen Mehtoden und kann über ein und denselben Pointer > unterschiedliche Objekte und deren virtuelle Methoden zusammen würfeln. > > Habt ihr OOP überhaupt verstanden? Objektorientierung ist ein Programmierparadigma, kein syntaktischer Zucker, den die Programmiersprache der Wahl bereitstellt, um das einfacher zu machen. Hast Du OOP überhaupt verstanden?
Walter T. schrieb: > Objektorientierung ist ein Programmierparadigma, kein syntaktischer > Zucker, den die Programmiersprache der Wahl bereitstellt, um das > einfacher zu machen. Zumal Alan Kay, als er den Begriff erfand, damit keineswegs meinte, Daten und Funktionen in einem aufgebohrten struct abzulegen. Eigentlich ging es dabei um das Konzept von Akteuren, die miteinander nur durch eine Message-Schnittstellen kommunizieren.
> Autor: MaWin (Gast) > Datum: 08.11.2019 21:08 > Autor: MaWin (Gast) > Datum: 08.11.2019 21:09 > Autor: MaWin (Gast) > Datum: 08.11.2019 21:27 > Autor: MaWin (Gast) > Datum: 08.11.2019 21:32 > Autor: MaWin (Gast) > Datum: 08.11.2019 22:05 Der Psychopath, der seinen Namen nicht kennt und stattdessen MaWin ins Namensfeld schreibt, dreht mal wieder völlig am Rad. Also Leute, der Müll kam nicht von mir.
MaWin schrieb: > Es wurde von OOP gesprochen. Und darauf beziehe ich mich. Die Jungs > haben Nonsens gesch... Natürlich geht OOP auch in C und da helfen die structs.
MaWin schrieb: > Auch verwaltet es > die virtuellen Mehtoden und kann über ein und denselben Pointer > unterschiedliche Objekte und deren virtuelle Methoden zusammen würfeln. MaWin schrieb: > Das ist wieder einmal totaler Blödsch....!
Claus schrieb: > welche Vorteile/Nachteile haben Funktionspointer in einem Struct (in C). Weder noch. Die Möglichkeit existiert erst einmal ganz neutral. Der Verwendungskonext entscheidet. Wenn das Verwenden in einem konkreten Fall mehr Probleme löst als neue schafft sind sie von Vorteil.
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.