WinAVR 20070122 - bug ?

Feb 10, 2007 5 Replies

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 ?


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

pzdr mk

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 ?

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() ++; }

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

pzdr mk

U¿ytkownik "mk" <REVERSE snipped-for-privacy@myzskm.REMOVE napisa³ w wiadomo¶ci news:eqlnb7$hcs$ snipped-for-privacy@news.onet.pl...

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.

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required