*****SPAM***** Re: C _ jak rozepsat ?__ádek

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Neděle Duben 28 23:24:52 CEST 2013


No K51 bych nepovazoval za nejak klasicky prekladac, uz architektura 51 
je tak neprivetiva pro C, ze si vyzaduje spoustu divnych reseni... Berme 
CPU s alespon datovym prostorem normalne adresovanym.
Pouziti memcpy pro IO asi bude mit uskali, ze neni zaruceno poradi a 
velikost kopirovanych polozek, logicky.
A indexovat logickou hodnotou by me teda ani nenapadlo nakonec 1 | 1 
nemusi byt 1....

Dne 28. 4. 2013 23:18, Radek Benedikt napsal(a):
>> To void* je formalna deklaracia, ktorou sa hovori, ze memcpy() ma
>> akceptovat akykolvek pointer. V skutocnosti moze byt memcpy()
>> implementovany tak, ze berie typ pointra do uvahy (a moze sa inlinovat,
>> generovat kompilatorom, atd.atd. - ale to nesuvisi, len ilustruje, ze
>> nemusite len z citania kniznice vediet, ako to presne bude prelozene); a
>> ak je to pointer na word, tak ta implementacia moze predpokladat spravne
>> zarovnanie. Ba dokonca pointer moze priamo v sebe niest typ na ktory
>> ukazuje - implementacia pointra nie je predpisana, len jeho spravanie. No
>> a pointa toho, preco memcpy() ma v nasom konkretnom pripade dovolene
>> zlyhat je v tom, ze uz tym pretypovanim nespravne zarovnaneho
>> cisla/pointra vznikne nespravny pointer, a jeho pouzitie *kdekolvek* inde
>> v programe (t.j. aj v kniznicnej funkcii) moze vyvolat chybu; pretypovanie
>> (ci uz formalne alebo explicitne) na void* ten pointer automaticky
>> "neopravi".
> Lepe bych to asi nenapsal, uz drevni kompilatory (treba Keeil51, sorry
> za ee) maji pro jednu funkci vic knihovnich variant lisicich se
> pouzitymi registry a zarovnanim. Udelat z pointeru void sebou nese dva
> problemy. Prvnim je prave vyse zminena optimalizace a druhou je
> "zbaveni" se otravneho prekladace a jeho vecneho kecani o tom ze tadu je
> neco divneho. Nadavat na prekladac, ze neco blbe prelozil je pak spis
> problem chybejici sebereflexe. Ono tech veci co umi prekladac hlidat je
> pomerne moc a dost velky balik patchu co tu nekdo vytahl je vetsinou
> prave o tom hlidani, aby se nekde negeneroval univerzalni kod v oblasti,
> kde je HW omezeni. A nebo, prave o tom aby se serval programator, ze ma
> neco blbe. Pravda, ono je to nekdy s prekladaci usmevne a obcas neni
> primo napsano jak je to ci musi byt implementovano. A v 99% je to v
> beznych prekladacich implementovano shodne, protoze to vyplyva s logiky
> veci. Vzpominam si na mladi, kdy jsem byl presvedcen je "true" do
> prekladace dame jako 0xFF. Pravda definice to nezakazoval, ta
> specifikovala, ze "false" je 0 a zbytek je true. Logicke operace by
> takto vychazely i docela slusne. Jenze radeji jsme pak pouzili jako
> kazdy druhu "true" 0x01. A proc? Je to proste, i logicka hodnota se
> mohla pouzit jako index pole a komplikace konverze hodnota -> index pole
> nam za to nestala.
>
> Radek (benedikt2hw.cz)
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list