Dalsi zahada v C -> Prevod long int na string

Milan B. milan na bastl.sk
Úterý Červenec 26 01:07:04 CEST 2011


On 26.7.2011 0:14, Petr Tomasek wrote:
> On Mon, Jul 25, 2011 at 11:38:34PM +0200, Milan B. wrote:
>> On 25.7.2011 23:26, Petr Tošovský wrote:
>>> Hledam hledam ale nenachazim. Uz i emaily se musi debugovat... :-)
>>>
>> je to v popise :
>>
>> (radix>0&&   radix<= 16)
> pokud byste mel radix jako unsigned (nechapu, k cemu muze byt dobre signed),

|void itoa(int input, char *buffer, int radix) je typicka deklaracia v 
stdlib.h (ak je tato funkcia implementovana). To som si nevymyslel sam.

|
> pak neni potreba psat radix>0, anzto v podmince je to ekvivalentni prostemu radix,
> tj. testovat na:
>
>   (radix&&  (radix<=16))
>

Co je samozrejme chybne, ako som sa zmienil v casti, ktoru ste odmazali. 
radix musi byt >=2. Okrem toho to nebola podmienka v C, to bol slovne 
popisany constraint s kreativnym pouzitim syntaxe C. A nakoniec, ak uz 
teda potrebujete hnidopisit,  z hladiska formalnej spravnosti, radix nie 
je logicka hodnota, tak by nemal vystupovat ako operand logickeho vyrazu 
(to ze C interpretuje logicke hodnoty tak, ako ich interpretuje je sice 
pekne, ale to na veci nic nemeni).

> Stejne tak v:
>       do {
>          s[i++] = "0123456789ABCDEF"[n % radix];
>      } while ((n /= radix)>  0);
>
> to lze daleko jednoduseji zapsat jako:
>      } while (n /= radix);

Je to pravda, ale je to opat formalne nespravne. Vysledok vyrazu nie je 
logicka hodnota.


> Kdyz uz jsme u tech optimalizovanych zapisu. Ono se to pak i lip cte,
> anzto tam clovek nema zbytecny balast... (a lip pise...)   ;-)
>
> P.T.
>

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20110726/bd4e3a0e/attachment-0001.htm>


Další informace o konferenci Hw-list