Edin po-interesen switch statement

6 отговора 342 прегледа
#1

Edin po-interesen switch statement

Pravilen li e tozi C code i kakwo pravi?

register n = (count + 7) / 8; /* count > 0 assumed */

switch (count % 8)
{
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}

Отговор
в отговор на l #2

Re: Edin po-interesen switch statement

Освен, че сигурно този код не е правилен (въпреки че може би се компилира) ,то той е и безмислен. Switch-a e само за да е по-трудно за разбиране. Упростеният вариант е:

register n = (count + 7) / 8; /* count > 0 assumed */

do
{
*to = *from++;
}
while (--n > 0);

Отговор
в отговор на l #3

Re: Edin po-interesen switch statement

Извинявам се, имам малка грешка. Примерчето е:

register n = (count + 7) / 8; /* count > 0 assumed */

n += count % 8;

do
{
*to = *from++;
}
while (--n > 0);



Отговор
в отговор на l #4

Re: Edin po-interesen switch statement

Abe dali e pravilen ne znam, ama se kompilira :))
resultata e sustia kato:
to[0] = from[count-1];

Отговор
в отговор на n/a #5

Re: Edin po-interesen switch statement

Predstaviai si che to e i/o address, a ne obiknoven address w pametta :)
from ot druga strana e w obiknovenata pamet

Отговор
в отговор на l #6

Re: Edin po-interesen switch statement

n = ((count + 7) / 8) + (count % 8)

От адеса сочен от from ще се прехвърлят един по един, "от ляво на дясно" n-1 елемента в адреса сочен от to.

Отговор
в отговор на GG #7

Re: Edin po-interesen switch statement

tc, shte se prehvyrliat count elementa. :)

Towa e interesen zapis na loop unrolling. Kazwa se Duff's device. Towa e dosta izvestna konstrukcia -- ako tyrsish za "*to=*from++" w google 5 ot pyrvite 6 rezultata sa za Duff's device :)

Отговор