Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

April 25, 2007 / by Zsolt Soczó

Érdekes kód

Fordul ez a kód? Csinál valamit?

[source:c++]
int c = 8;
char b[] = ” “;
char alma[] = “almaalma”;
char* a = alma;

switch (c % 8)
{
case 0: do { *b = *a++;
case 7: *b = *a++;
case 6: *b = *a++;
case 5: *b = *a++;
case 4: *b = *a++;
case 3: *b = *a++;
case 2: *b = *a++;
case 1: *b = *a++;
} while ((c -= 8) > 0);
}
[/source]

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

LEAVE A COMMENT

9 COMMENTS

  • SebDani April 25, 2007

    >Fordul ez a kód?
    Remélem, nem! ;-)
    Honnan szedted?

  • Soczó Zsolt April 25, 2007

    Majd elmondom, de egyelőre még várom, más mit szól hozzá.

  • mviktor April 25, 2007

    Szornyusegesen nez ki, de fordul, sot! mukodik. http://en.wikipedia.org/wiki/Duff's_device

  • Rétikánya April 25, 2007

    Magamtól szörnyülködtem. Megnéztem a Wikin…
    …s ilyenkor mindig rájövök mennyire nem is értek a programozáshoz. El kéne mennem favágónak.
    Hogy futottál bele?

  • GerleiM April 25, 2007

    Ezek után kíváncsi lennék a memcpy implementációjára…

  • SebDani April 26, 2007

    Ebben az esetben szívesen rácsapnék a kezére annak aki azt a fordítót írta, amin ez lefordul.
    Szerintem már a QBasic is szólt, ha Goto-val egy ciklusmagba akart az ember fia (kívülről) ugrani…

  • hrongyorgy April 28, 2007

    Linuxon nem lehet megetetni…

    merlin ~ # gcc -c duff.c
    duff.c:6: error: syntax error before "switch"
    merlin ~ #

    És

    merlin ~ # gcc -c duff.cpp
    duff.cpp:6: error: expected unqualified-id before "switch"
    merlin ~ # mv duff.cpp duff.c

    Bár érdekes, hogy minden formában a switch előtt jelez hibát, nem pedig a do belsejében. Hmmm…

  • agysejt May 20, 2007

    Ez az egyik legfontosabb optimalizációs eljárás, ami kihasználja a proci pipeline-t, 50-70 % os gyorsulást okoz. Érdemes megjegyezni. Ha tudjuk, hogy a tömb mérete pl. 5-el osztható, akkor nem kell ilyen csúnya kód :)

    Amúgy nem csúnya, a switch utasítása specifikációja volt annó elcseszve.
    C#-ben kötelező a break :)