KEIL+kompilator C == bledy ?

Witam Wszystkich, podczas pisania programu w C na '51 w Keil-u znalazlem taka mala dziwnostke:

unsigned long wynik; wynik=20000+50000; (po kompilacji wynik=0x011170 czyli poprawnie)

natomiast:

unsigned long wynik; wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)

I mam do Was takie pytanko, czy moglby to ktos sprawdzic ? Moze to akurat ja mam cos nie tak ustawione ? Z gory Dzieki.

Pozdrowka Robert

Reply to
Robert Łopatecki
Loading thread data ...

Robert Łopatecki napisal(a):

To jest Ok. Zrob tak:

wynik=(unsigned long)7*10000;

lub

wynik=7*(unsigned long)10000;

Reply to
Marcin E. Hamerla

sprawdz to: unsigned long wynik; wynik=7ul*10000ul;

Reply to
peters

Czy moglibyscie mi wyjasnic dlaczego tak zapisywac ? Czy moze doszliscie do tego droga prob i bledow ?

Robert

Reply to
Robert Łopatecki

Robert Łopatecki napisal(a):

Metoda prob i bledow nie. Raczej czachologicznie. Chodzi o to, ze

10000 jest to liczba typu int. 7 to char. Kompilator wykonujac obliczenie zaklada, ze wynik bedzie typu int. Czyli tu jest zrodlo bledu, poniewaz wynik powinien byc long. I na koncu kompilator dokonuje konwersje int -> long. Konwersja typow to jedna z wazniejszych spraw gdy piszesz na mikrokontrolery.
Reply to
Marcin E. Hamerla

Wielkie dzieki.

Cenna uwaga, ale chyba nie tylko w przypadku mikrokotrolerow.

Robert

Reply to
Robert Łopatecki

Robert Łopatecki napisal(a):

Znacznie wazniejsze niz w przypadku duzych maszyn, bo tam niektore bledy nie wyleza.

Reply to
Marcin E. Hamerla

Zgadza sie. Szczegolnie w przypadku 32 bit RISC. Dobrze manewrujac typami i rzutowaniem mozna wiele uzyskac.

B.

Reply to
B

I dlatego bardzo mnie dziwi popularnosc tego jezyka w tych zastosowaniach, a nie czegos, co zacznie wrzeszczec gdy tylko programiscie wpadnie do glowy cos glupiego. IMO Ada bylaby znacznie lepsza.

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski
Reply to
Piotr Wyderski
Reply to
Piotr Wyderski

W artykule <bvdrfl$lhc$ snipped-for-privacy@atlantis.news.tpi.pl> Piotr Wyderski napisal(a):

Wolę Małgorzatę ;-)))

bp, nmsp

Marcin Stanisz

Reply to
Marcin Stanisz

Od Ady odeszlismy 15 lat temu, mimo ze byla lepsza :-)

J.

Reply to
J.F.

Piotr Wyderski wrote: [ciach]

A w czym piszesz Piotrze ? I co ? (tak z ciekawosci pytam, bo ja jednak w C/C++)

Reply to
fred cassidy

Obecnie zajmuje sie automatyczna translacja; pisze generator asemblerow. A w czym ogolnie pisze? -- to zalezy od konkretnego problemu, spektrum jest szerokie: od asemblera do Prologu, z dwoma bardzo silnymi pikami w okolicach C++ oraz Javy. :-)

Coz, ja bym sie _bardzo_ bal pisac w C++ na mikrokontrolery. Zbyt duzo od nich zazwyczaj zalezy, a pisanie oprogramowania o znaczeniu krytycznym dla ludzkiego zycia i zdrowia w C++ to gra w rosyjska ruletke. No ale ja mam bardzo paranoiczne podejscie do niezawodnosci oprogramowania... ;-)

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Piotr Wyderski wrote:

Nie, pisanie w C++ na mikrokontrolery :)) niee... nie mialem mikrokontrolerow na mysli.. Na mysli mialem programowanie "zwyczajne" . Pozatym, nadużywanie obiektów moim zdaniem jest częste (i nagminne niestety), ze szkodą dla rozmiaru, szybkosci i niezawodności własnie.

Dziekuje :)

Pozdrawiam

Reply to
fred cassidy

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.