OT Ceckarsky kviz

Jan Waclawek konfera@efton.sk
Čtvrtek Březen 5 14:23:21 CET 2009


To s rozsirenim je pravda, a explicitne pretypovanie je istota. To je problem cislo jeden.

S tym uzatvaranim do zatvoriek je tiez pravda ze je to tak lepsie, a ja to tak vzdy aj robim; ale problem to nie je, precedencia jasne udava poradie ako sa vykonaju jednotlive operacie. Ale toto bol kviz takze som chcel troska aj odviest pozornost od hlavneho problemu.

To, ako sa s nejakym problemom vysporiada jeden, dva, alebo aj dvadsat kompilerov, je uplne irelevantne vzhladom na to, co hovori norma, a teda co je portabilne.

Hlavny problem v tomto pripade je popisany jednoznacne v norme, C99 v kapitole 6.5:
"Except as specified later (for the function-call (), &&, ||, ?:, and comma operators), the order of evaluation of subexpressions and the order in which side effects take place are both unspecified."

Pre istotu sa to este opakuje aj v prilohe J (Portability issues - unspecified behaviour).

Po slovensky povedane, poradie vykonania operacie bitwise OR je zlava doprava, ale poradie vyhodnotenia jednotlivych vyrazov, ktore su ORovane, je nespecifikovane. Este vypuklejsie je to na tomto priklade (pozical som si ho z C-FAQ): majme vyraz 
f() + g() * h()
precedencia v nom jasne udava, ze vysledok funkcie g() bude vynasobeny vysledkom funkcie h() a az potom bude k nemu pripocitany vysledok funkcie f(); ale to poradie neplati pre _vykonavanie_ funkcii: pokojne sa moze funkcia f() _vykonat_ skor nez funkcia g() ci funkcia h().

Mimochodom, Miro, je to len o jeden riadok vyssie nez tento Tvoj citat... ;-)

wek



----- Original Message ---------------
>To je fakt, na to pozor... operator << implicitne pracuje s typmi int,
>takze zalezi na reprezentacii int v kompilatore. Jano neuviedol
>kompilator :-) V tom mojom priklade v MSVC to zahralo, lebo tento
>kompilator ma int 32 bitove.
>
>"Some operators (the unary operator ~, and the binary operators <<,
>>>, &, ^, and |,
>collectively described as bitwise operators) are required to have
>operands that have
>integer type. These operators yield values that depend on the internal
>representations of
>integers, and have implementation-defined and undefined aspects for
>signed types."
>
>miro
>
>Dòa 5. marec 2009 13:18, Martin Persich <persich@transcon.cz> napísal/a:
>> Myslim, ze ne. Chybi mi tam pretypovani na 16 bit operaci pred posuvem a
>> prirazenim.
>> Martin
>>



Další informace o konferenci Hw-list