Forum: Mikrocontroller und Digitale Elektronik C/C++: Zielvariable (für Returnwert) als Referenz innerhalb einer Funktion verwenden?


von Alexander I. (daedalus)


Lesenswert?

Hallo,

ich habe folgendes Konstrukt in einem Treiber:
1
class SerialDevice
2
{
3
  virtual void Read(char* data, int32_t count) = 0;
4
  virtual void Write(char* data, int32_t count) = 0;
5
  inline char ReadChar(void) {char ret; Read(&ret, sizeof(char)); return ret;} // <---
6
  inline void WriteChar(char data) {Write(&data, sizeof(char));}
7
}
Alle SerialDevice's müssen also Read/Write implementieren. Die 
Basisklasse kann aber schon ReadChar und WriteChar inline 
implementieren.

Es geht um die Funktion ReadChar. Es ist klar, dass der Rückgabewert 
einer char-Variable zugewiesen werden wird bzw. der Entwickler das durch 
den Funktionsaufruf erahnen kann, der die Funktion nutzt. Ich gehe 
davon, dass der Compiler durch das Inlining die Funktion und das "char 
ret"-Behelfskonstrukt sowieso herausoptimiert.

Worauf ich nun hinaus will: Gibt es eine C-Syntax die z.B. Folgendes 
erlauben würde?
1
char ReadChar(void) {Read(&<OrtAnDenReturnwertGespeichertWerdenWird>, sizeof(<Returnwerttyp>);}
Also direkt den Zugriff auf den Ort an den der Returnwert der Funktion 
hinübergeben wird und z.B. auch eine Abfrage des Typs mit sizeof() ohne 
den Rückgabetyp explizit anzugeben? Also so eine Art "Referenz auf den 
Returnwert".

Die Frage ist eher hypothetisch ohne praktischen Anwendungsfall, aber es 
würde mich doch mal interessieren, ob sowas mit Boardwerkzeugen möglich 
ist?

von Dieter (Gast)


Lesenswert?

Du machst dir da gedanken, über Sachen, die ausschließlich den Compiler 
interessieren. Bzw. dessen Optimizer. Denn der kümmert sich darum, wo 
genau er die Variable Ret anlegt. Für dich als Probrammierer macht es 
überhaupt keinen Unterschied, ob er sie direkt an der Position des 
Rückgabewertes anlegt, oder ob er sie beim Return dorthin kopiert.

von Dieter (Gast)


Lesenswert?

Nachtrag:
Es ist nichtmal gesagt, dass <OrtAnDenReturnwertGespeichertWerdenWird> 
überhaupt als Speicheradresse existiert. Das kann genauso (und wird 
meistens auch so sein) einfach ein internes Prozessorregister sein.

von Alexander I. (daedalus)


Lesenswert?

Das ist mir klar, dass der Optimizer das ggf. wegoptimiert und die 
Speicheradresse in Wirklichkeit ein Register sein kann. Ich wollte nicht 
nach der Sinnhaftigkeit fragen, sondern eher, ob C eine syntaktische 
Möglichkeit bietet auf einer "Returnreferenz" innerhalb der Funktion 
zuzugreifen aber vermutlich ist das eher nicht der Fall.

von Dieter (Gast)


Lesenswert?

ah, ok, ich glaube ich weiß jetzt was du meinst. In anderen Sprachen (z. 
B. Pascal) existiert ja durchaus die Möglichkeit den Returnwert als 
Variable anzusprechen, ohne extra eine Variable deklarieren zu müssen.

Aber deine solche Möglichkeit gibts in C/C++ nicht.

von Alexander I. (daedalus)


Lesenswert?

Alles klar, danke :)

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.