RTV forum PL | NewsGroups PL

Problem z inkrementacją wskaźnika w WinAVR 20070122 - dlaczego występuje?

WinAVR 20070122 - bug ?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Problem z inkrementacją wskaźnika w WinAVR 20070122 - dlaczego występuje?

Andy
Guest

Sat Feb 10, 2007 8:59 pm   



Witam

Nie kompiluje mi sie taka konstrukcja pod WinAVR 20070122:

{
char byte;
void *ptr;

byte = *((char*)ptr)++;

// ...
}

error: invalid lvalue in increment

Ktos moze wie dlaczego ?

Umiem sobie z tym poradzic wiec to nie problem
ale czy to jakis bug w nowej wersji WinAVR ?

--
Andrzej

mk
Guest

Sat Feb 10, 2007 11:28 pm   



Newsuser "Andy" <anokWYTNIJ@ceti.pl> wrote:
Quote:
Nie kompiluje mi sie taka konstrukcja pod WinAVR 20070122:

{
char byte;
void *ptr;

byte = *((char*)ptr)++;

// ...
}

error: invalid lvalue in increment

Ktos moze wie dlaczego ?

Umiem sobie z tym poradzic wiec to nie problem
ale czy to jakis bug w nowej wersji WinAVR ?

Nie, to nie bug - kompilator zachowuje się poprawnie.
Konwersja nie daje modyfikowalnej l-wartości... a tej wymaga opeator ++.

pzdr
mk

Andy
Guest

Sun Feb 11, 2007 12:15 am   



Użytkownik "mk" <REVERSE_lp.pw@myzskm.REMOVE> napisał w wiadomości
news:eqlgtg$254$1@inews.gazeta.pl...
Quote:
Newsuser "Andy" <anokWYTNIJ@ceti.pl> wrote:
Nie kompiluje mi sie taka konstrukcja pod WinAVR 20070122:

{
char byte;
void *ptr;

byte = *((char*)ptr)++;

// ...
}

error: invalid lvalue in increment

Ktos moze wie dlaczego ?

Umiem sobie z tym poradzic wiec to nie problem
ale czy to jakis bug w nowej wersji WinAVR ?

Nie, to nie bug - kompilator zachowuje się poprawnie.
Konwersja nie daje modyfikowalnej l-wartości... a tej wymaga opeator ++.
...

znaczy po konwersji wskaznika ptr na (char*) nie da sie na nim zrobic ++ ?

chyba masz racje ale starsza wersje avr-gcc to lykala
czyzby blad w starszej wersji ?

--
Andrzej

mk
Guest

Sun Feb 11, 2007 1:18 am   



Newsuser "Andy" <anokWYTNIJ@ceti.pl> wrote:
Quote:
Nie kompiluje mi sie taka konstrukcja pod WinAVR 20070122:

{
char byte;
void *ptr;

byte = *((char*)ptr)++;

// ...
}

error: invalid lvalue in increment

Ktos moze wie dlaczego ?

Umiem sobie z tym poradzic wiec to nie problem
ale czy to jakis bug w nowej wersji WinAVR ?

Nie, to nie bug - kompilator zachowuje się poprawnie.
Konwersja nie daje modyfikowalnej l-wartości... a tej wymaga opeator
++. ...

znaczy po konwersji wskaznika ptr na (char*) nie da sie na nim zrobic
++ ?

Tak. Rzutowanie daje "wartość wyrażenia", czasami zwaną r-wartością.
Podobnie poniższy przykład nie jest prawidłowy:

int foo();

void bar() {
foo() ++;
}

Quote:
chyba masz racje ale starsza wersje avr-gcc to lykala
czyzby blad w starszej wersji ?

Zdecydowanie błąd. To nie było prawidłowe w C90, ani nie jest w C99.

pzdr
mk

Andy
Guest

Sun Feb 11, 2007 3:30 pm   



Użytkownik "mk" <REVERSE_lp.pw@myzskm.REMOVE> napisał w wiadomości
news:eqlnb7$hcs$1@news.onet.pl...
[quote:537e5a2cff]
...
[/quote:537e5a2cff]
Dzieki za wyjasnienia.

Jak na razie wszystko rozumiem ale
cos takiego sie kompiluje:

void * dataPtr;
char byte;

byte = *((char*)dataPtr);
dataPtr++;

a tego nie pojmuje

Skad kompilator wie o ile zwiekszyc ptr skoro jest wskaznikiem na void ?

Kompiluje sie pod avr-gcc ale pod Visualem C++ sie nie kompiluje
co jest w/g mnie normalne.

--
Andrzej

mk
Guest

Sun Feb 11, 2007 3:46 pm   



Newsuser "Andy" <anokWYTNIJ@ceti.pl> wrote:
[quote:614ad09863]Dzieki za wyjasnienia.

Jak na razie wszystko rozumiem ale
cos takiego sie kompiluje:

void * dataPtr;
char byte;

byte = *((char*)dataPtr);
dataPtr++;

a tego nie pojmuje

Skad kompilator wie o ile zwiekszyc ptr skoro jest wskaznikiem na
void ?

Kompiluje sie pod avr-gcc ale pod Visualem C++ sie nie kompiluje
co jest w/g mnie normalne.
[/quote:614ad09863]
Kompilator powinien zatrzymać swe działanie i wyświetlić błąd.
Spróbuj włączyć opcję ścisłej zgodności ze standardem, o ile ten kompilator
taką posiada.
Kompilatory dla mikrokontrolerów posiadają wiele rozszerzeń ponad standard,
być może ujawniła się tu jedna z nich.

pzdr
mk

elektroda NewsGroups Forum Index - Elektronika Polska - Problem z inkrementacją wskaźnika w WinAVR 20070122 - dlaczego występuje?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map