Edin po-interesen switch statement
6 отговора
342 прегледа
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);
}
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);
}
Re: Edin po-interesen switch statement
Освен, че сигурно този код не е правилен (въпреки че може би се компилира) ,то той е и безмислен. Switch-a e само за да е по-трудно за разбиране. Упростеният вариант е:
register n = (count + 7) / 8; /* count > 0 assumed */
do
{
*to = *from++;
}
while (--n > 0);
register n = (count + 7) / 8; /* count > 0 assumed */
do
{
*to = *from++;
}
while (--n > 0);
Re: Edin po-interesen switch statement
Извинявам се, имам малка грешка. Примерчето е:
register n = (count + 7) / 8; /* count > 0 assumed */
n += count % 8;
do
{
*to = *from++;
}
while (--n > 0);

register n = (count + 7) / 8; /* count > 0 assumed */
n += count % 8;
do
{
*to = *from++;
}
while (--n > 0);
Re: Edin po-interesen switch statement
Abe dali e pravilen ne znam, ama se kompilira :))
resultata e sustia kato:
to[0] = from[count-1];
resultata e sustia kato:
to[0] = from[count-1];
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
from ot druga strana e w obiknovenata pamet
Re: Edin po-interesen switch statement
n = ((count + 7) / 8) + (count % 8)
От адеса сочен от from ще се прехвърлят един по един, "от ляво на дясно" n-1 елемента в адреса сочен от to.
От адеса сочен от from ще се прехвърлят един по един, "от ляво на дясно" n-1 елемента в адреса сочен от to.
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 :)
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 :)