Properties in C

Gast #5588377
Lesenswert?

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.
Persönliche Seite #5588400
Lesenswert?

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.
Gast #5588431
Lesenswert?

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.
Persönliche Seite #5588495
Lesenswert?

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;
#5588637
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren