[C Keil uVision]Dlaczego tak się dzieje??????????

Jun 04, 2004 5 Replies

Mam pewną strukturę:



typedef struct { signed int val_c; unsigned char val_d; }charval;



Na niej zdefiniowane pewne funkcje (operatory):



//Dodawanie dwóch charval charval Add(charval skl1, charval skl2); //Dodawanie l. calkowitej do charval charval AddC(charval skl1, int skl2_val_c); //Odejmowanie dwoch charval charval Sub(charval odjemna, charval odjemnik); //Mnożenie charval lcalk charval MultC(charval czynn1, char czynn2);



Dlaczego po wykonaniu tego typu operacji: Sub(AddC(zero, A_60), MultC(delta,2)) wychodzi mi jakaś kaszana, która wcale nie jest zgodna z oczekiwanym wynikiem



Natomiast gdy zrobięcoś takiego charval w1, w2; w1 = AddC(zero, A_60); w2 = MultC(delta,2); Sub(w1,w2); Wszystko działa OK



Co może być przyczyną takiego obrotu sprawy. Błąd kompilatora, błąd przekazywania parametrów do funkcji??. Gdy puszczę wszystko pod Visualem, czy Borlandem nie ma problemów z błędnie działającymi funkcjami( tylko co mi z tego jak chcę to puścić to na '51). Dzięki za wszelkie sugestie. Marcin


To jest C++ ? Bo samo C generalnie nie przewiduje zwracania struktury przez funkcje. Skoro kompilator to przepuszcza, to widac ulepszone C, ale moze jednak zle kompiluje ? zajrzyj do kodu.

A miejsca na stos masz duzo ? Bo powyzsze juz pare bajtow zajmuje - trzeba wrzucic wynik MultC na stos, zero, A_60, zarezerwowac miejsce na wynik, wywolac AddC ...

J.

Ja się już oduczyłem zbyt oszczędnego pisania w SDCC:-). W razie konieczności zajrzenia do asm-a proste kontrukcje łatwiej się śledzi niż wygibasy, które robi kompilator.

Użytkownik "Domel" snipped-for-privacy@poczta.fm napisał w wiadomości news:c9pcbu$all$ snipped-for-privacy@atlantis.news.tpi.pl...

moze sie cos przekreca przy liczeniu pusc pod debugerem to zobaczysz, w ktorym miejscu wynik bedzie nieprawidlowy

na platformie 32 bit, int jest 32-bit a na 16 bit jak i na 8 bit jest 16-bit

Nie wartości nie są przekraczane napewno. Jak już coś to chyba ma to związek z przepełnionym stosem

Użytkownik "Andy" snipped-for-privacy@ceti.pl napisał w wiadomości news:c9q3sk$evn$ snipped-for-privacy@inews.gazeta.pl...

news:c9pcbu$all$ snipped-for-privacy@atlantis.news.tpi.pl...

Ponieważ przekazujesz argumenty w postaci funkcji.....

pozdr. swiniaczek

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required