Frage zur zuweisung mit Fragezeichenoperator in c

Gast #5651064
Lesenswert?
• ▲
▼
Hallo,
ich habe eine frage. Bei folgender zuweisungwird nicht mehr kompiliert
1
x = direction == 1 ? x+=2 : x-=2;
Bekomme die Meldung
error: lvalue required as left operand of assignment
             x = direction == 1 ? x+=2 : x-=2;
Mit einem kleinem Pfeil auf das -=.
schreibe ich anstelle von x-=2 einfach nur einen Wert, wird durchgebaut. 
Warum geht das nicht mit dem -= ? x+=2 ist ja anscheinend auch kein 
Problem.
#5651264
Lesenswert?
• ▲
▼
Yalu X. schrieb:
> Da direction nur die Werte 0 und 1 annehmen kann, also eine boolesche
> Größe ist, würde ich stattdessen eine Variable vom Typ bool namens
> forward oder rightward o.ä. verwenden und den Ausdruck so schreiben:

Ich würde den Namen beibehalten und einen enum mit den Werten "forward" 
und "backward" oder wie immer sie heißen sollen verwenden. Am besten die 
2 noch durch sowas wie "speed" ersetzen, so dass diese magische Zahl 
auch noch verschwindet.  Ich würd's wohl auch ausschreiben und den 
?:-Operator hier gar nicht verwenden. Der ist ja eher dafür gedacht, 
zwischen zwei Werten auszuwählen. Hier wird aber eher zwischen zwei 
Oeratoren ausgewählt.
Würde also bei mir wohl in etwa so aussehen:
1
if (direction == Forward)
2
    x += SPEED;
3
else
4
    x -= SPEED;

Das finde ich am besten lesbar.
Gast #5651281
Lesenswert?
• ▲
▼
Yalu X. schrieb:
> Da direction nur die Werte 0 und 1 annehmen kann, also eine boolesche
> Größe ist, würde ich stattdessen eine Variable vom Typ bool namens
> forward oder rightward o.ä. verwenden und den Ausdruck so schreiben:
>
> x += forward ? 2 : -2;

Ich bin ja in Zeiten von Spectre und Konsorten dafür möglichst jeden 
Branch zu vermeiden. Also:
1
x += 2 * (2 * forward - 1);
;-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.