Forum: PC-Programmierung Properties in C


von Roth (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

Das macht nur bei Objekten Sinn, die gibt es in C aber nicht.
Von was willst du denn Properties setzen?

von Roth (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Stefan F. (Gast)


Lesenswert?

Ich glaube der TO will diverse Operatoren wie [] und = überschreiben. 
Das geht nur in C++, nicht in C.

von Roth (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

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.

von Roth (Gast)


Lesenswert?

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 
;-)

von Rufus Τ. F. (rufus) Benutzerseite


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;

von Roth (Gast)


Lesenswert?

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 :-)

von Rolf M. (rmagnus)


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.

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
Noch kein Account? Hier anmelden.