C/C++: Zielvariable (für Returnwert) als Referenz innerhalb einer Funktion verwenden?

OP #1685576
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?
Gast #1685596
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.
Gast #1685600
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.
OP #1685652
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.
Gast #1685659
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.