Anzeige:
Ergebnis 1 bis 2 von 2

Thema: C: "Ungültiger L-Wert in Erhöhung"

  1. #1
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762

    C: "Ungültiger L-Wert in Erhöhung"

    Ich habe hier ein C-Programm vorliegen, das folgendes Konstrukt verwendet:

    Code:
    #define FetchLE32(p) (*((unsigned int*)(p))++)
    ...
    
    void funktion (int index, unsigned char* start) {
        unsigned char* bp;
        bp=start+index*8;
        offset=FetchLE32(bp);
        ...
    }
    Der gcc meckert diese Stelle offset=FetchLE32(bp); an:
    "Fehler: Ungültiger L-Wert in Erhöhung"
    (bzw. auf englisch, wem das mehr hilft: "error: invalid lvalue in increment")

    Ich habe keine Ahnung warum und habe mal folgendes nachgebaut:
    Code:
    #define FetchLE32(p) (*((unsigned int*)(p))++)
    int main() {
            unsigned int* ptr = (unsigned int*)7;
            (*((unsigned int*)(ptr))++);
    
            //FetchLE32(7);
    }
    Die auskommentierte Zeile macht doch genau das, was die beiden Zeilen darüber machen, aber sobald ich die Kommentare wegnehme, kommt auch hier die Fehlermeldung von oben, während die beiden ersten Zeilen in der main problemlos durchgehen.

    Kapier ich jetzt nicht...
    I haven't lost my mind - It's somewhere on a backup-disc

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Typproblem!

    bp ist ein "unsigned char *". Was dein Makro macht ist:
    Deinen unsigned char* nach unsigned int* casten. Wenn du das Resultat davon erhöhen willst muss das ein Lvalue sein. Ist es aber (offenbar) nicht.

    d.h. was du machst ist quasi äquivalent zu sowas:
    Code:
        char* b;
        (int*)b = 123;
    weil du ja erst castest und *dann* das Resultat der inkrementierung an das gecastete Ding zuweiswen willst - und das darfst du nicht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •