use of cast expressions as lvalues is deprecated

OP Persönliche Seite #471592
Lesenswert?

Huhu,

Der GCC Compiler gibt die Fehlermeldung
1
use of cast expressions as lvalues is deprecated

bei folgender Codezeile aus:
1
((uint8_t*)pHandle->pCurrentByte)++;

Der Sinn ist einfach, dass ein void* um 1*1 byte hochgezählt wird.

Warum ist das deprecated? Was wäre das bessere Equivalent?

Warum ist folgendes nicht deprecated? Da benutze ich doch auch ein Cast 
als LVALUE
1
*((uint8_t*)pHandle->pCurrentByte) = b;

Besten Dank für die Antworten.
Gast #471603
Lesenswert?

Das Resultat eines type casts ist normalerweise keine lvalue mehr, d.h. 
es kann nicht mehr links von einer Zuweisung stehen (x++ ist eine 
Zuweisung und benötigt folglich eine lvalue). Der GNU-Compiler mag dies 
früher zugelassen haben, aber das wurde wohl (m.E. korrekt) als Abirrung 
erkannt und wird nun entsprechend vermerkt.

Musst dir das vorstellen wie
   (a + b) = c;
hier ist (a + b) trivialerweise erkennbar keine lvalue. Bei casts ist 
das nur nicht so leicht erkennbar.
OP Persönliche Seite #471943
Lesenswert?

Genau, das ist das "Problem". Der Pointer ist halt "universell" und 
somit als void-pointer ausgelegt.

Hmm, sehe ich richtig, dass das "bessere" Equivalent dann folgendes ist:
1
pHandle->CurrentByte = ((uint8_t*) pHandle->Currentbyte) + 1;

Sprich, erst auf 8bit casten, heraufzählen und den ausgerechneten Wert 
wieder dem Void-pointer zuweisen.

PS: A.K.: Ich denke das bringt es auf den Punkt, danke vielmals ;)

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