Kennt C sowas wie property get / property let? Also sowas hier, nur in C https://www.akademie.de/wissen/vba-prozeduren-parameter-optimieren/properties-statt-funktionen
Das macht nur bei Objekten Sinn, die gibt es in C aber nicht. Von was willst du denn Properties setzen?
Stefanus F. schrieb: > Das macht nur bei Objekten Sinn, die gibt es in C aber nicht. > Von was willst du denn Properties setzen? Normal schon. Properties lassen sich aber auch so gut einsetzen. Nach außen wirkt eine Property wie eine Variable, der man einen Wert zuweisen kann. Bei der Zuweisung kann eine Property aber zusätzlich noch Code ausführen, z.B. den Wert auf Gültigkeit prüfen. Ich will das zum Zugriff auf das EEPROM verwenden. z.B. soll eine Property mit dem Namen EM da sein. Bei 'Wert auslesen' wird EEPROM[Adresse] ausgeführt, bei 'Wert zuweisen' wird EEPROM.update(Adresse, Data) ausgeführt. Das geht auch anders, aber Properties sind eleganter.
Du kannst in C genauso objektorientiert programmieren wie in C++, nur musst Du Dich um sehr viel selbst kümmern, ohne dabei Unterstützung durch den Compiler zu erhalten (es gibt keinen this-Pointer, und kein public/private/protected für den Zugriff auf Membervariablen o.ä.). Als Ersatz für eine Klasse dient hier die simple Struktur; jeder "Memberfunktion" musst Du dediziert einen Pointer auf das referenzierte Objekt mitgeben, und Konstruktoren/Destruktoren musst Du ebenfalls komplett selbst implementieren. Wenn Du aber Dinge wie Templates, Vererbung oder gar virtuelle Funktionen nachbilden wirst, dann wird das ganze schnell sehr, sehr umständlich und potentiell fehlerträchtig.
Ich glaube der TO will diverse Operatoren wie [] und = überschreiben. Das geht nur in C++, nicht in C.
Rufus Τ. F. schrieb: > Du kannst in C genauso objektorientiert programmieren ... Das will ich doch alles gar nicht :) Ich wollte nur auf eine Funktion zugreifen können wie auf eine Variable. Bei einer Funktion kann man üblicherweise nur einen Wert abfragen, aber nicht zuweisen. Einer Property hingegen kann man auch Werte zuweisen. Das geht in VBA nicht nur in Klassenmodulen (also Objekte), sondern überall. Die Verwendung außerhalb von Klassen ist zwar im allgemeinen exotisch, macht aber Sinn und das Programm dadurch wird lesbarer. Also why not. Ich glaube, ich habe verstanden, dass es sowas in C nicht gibt. Kann auch so leben oder werde mir was basteln. Danke für die Infos.
Roth schrieb: > Ich wollte nur auf eine Funktion zugreifen können > wie auf eine Variable. Tja, genau das ist eine der Funktionen von C++. > Also why not. C ist nicht VBA. Wenn du schon vergleichst, dann C++ mit VBA und C ,mit GW Basic.
Stefanus F. schrieb: > C ist nicht VBA. Wenn du schon vergleichst ... Habe mit C noch nicht viel gemacht. Das erkennt ihr doch an den Fragen ;-)
Roth schrieb: > ch wollte nur auf eine Funktion zugreifen können wie auf eine Variable. > Bei einer Funktion kann man üblicherweise nur einen Wert abfragen, aber > nicht zuweisen. Einer Property hingegen kann man auch Werte zuweisen. Aha. Nun, Du kannst das auch in C erreichen, indem Du statt einer Referenz einen Pointer auf das gewünschte Objekt zurückgibst und den beim Aufruf Deiner Funktion jeweils dereferenzierst.
1 | int *blafusel(void) |
2 | {
|
3 | return &bla; |
4 | }
|
5 | |
6 | ....
|
7 | |
8 | int x; |
9 | |
10 | x = *blafusel(); |
11 | |
12 | *blafusel() = 14; |
Rufus Τ. F. schrieb: > Nun, Du kannst das auch in C erreichen, indem Du statt einer Referenz > einen Pointer auf das gewünschte Objekt zurückgibst und den beim Aufruf > Deiner Funktion jeweils dereferenzierst. Besten Dank. Wieder was gelernt :-)
Es bringt dir nur nichts. Du kannst da z.B. nicht wie gewünscht bei der Zuweisung den neuen Wert prüfen, bevor er in die Variable geschrieben wird, weil du an den in der Funktion gar nicht rankommst. Du kannst auch nicht nach der Zuweisung des neuen Werts irgendwelchen Code ausführen (wie z.B. das Schreiben in deinen EEPROM), da die Funktion vor der Zuweisung ausgeführt wird. Du kannst in der Funktion auch nicht unterscheiden, ob gelesen oder geschrieben werden soll, da diese Operation komplett außerhalb der Funktion läuft.
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.