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

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

Reply to
Domel
Loading thread data ...

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.

Reply to
J.F.

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.

Reply to
TomekL

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

Reply to
Andy

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...

Reply to
Domel

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

pozdr. swiniaczek

Reply to
swiniaczek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.