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