lustige und interessante code-fragmente
atrox 17.11.2002 - 23:09 3241 10
atrox
in fairy dust... I trust!
|
postet hier (real-world) code-fragmente die euch schon mal untergekommen sind, wo man sich entweder an die stirn greift oder ordentlich ins grübeln kommt. ein stück lustigen codes aus einer gekauften C library für PIC µController: #define FALSE 0
#define TRUE !0
.. und hier ein stück code zum grübeln: 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);
}
Das ist völlig legaler C-Code!
|
SYSMATRIX
Legend Legend
|
ich check nicht ab was die do-while schleife macht ...
|
manalishi
tl;dr
|
vertipper wie "pirate" statt private sind auch ganz lustig und ein guter indikator dafür, dass man zu wenig kaffee intus hat
|
that
ModeratorHoffnungsloser Optimist
|
Das ist völlig legaler C-Code! Unglaublich, aber sowohl GCC als auch MSVC fressen das ohne Warnings...
|
that
ModeratorHoffnungsloser Optimist
|
Was echtes von mir (den Kommentar hat ein Kollege hinzugefügt ): // Get last day of month
UINT XpLastDayOfMonth(int y, int m)
{
// abandon all hope ye who enters here !!
return 30 + ((m^(m>>3))&1) - ((m==2) << (XpIsLeapYear(y) ? 1 : 0));
}
|
XeroXs
doh
|
echo("hello world");
|
that
ModeratorHoffnungsloser Optimist
|
Noch ein nettes (nicht von mir): #define SWAP( x , y ) ((x) ^= (y) ^= (x) ^= (y))
Aus der selben Library (die ultimative Erweiterung für die "for" Schleife ): #define ever ( ; ; )
|
Luki
UNDER CONSTRUCTION
|
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);
}
Das ist völlig legaler C-Code!
aber sowas hab ich auch noch nie gesehen
|
atrox
in fairy dust... I trust!
|
Das ist völlig legaler C-Code! ist nicht von mir - es heißt "Duff's Device" und wurde 1983 erfunden. dieses spezielle code-beispiel kopiert einfach nur bytes sequentiell auf einen io-port (bzw eine einzelne speicherstelle) - es dient aber zur demonstration, daß man mittels switch/case an jeder beliebigen stelle einer eines anderen c-blocks (in diesem fall while) einsteigen kann. das funktioniert deshalb, weil am ende eines case-blockes in c nicht automatisch ein break; stattfindet. diese technik läßt sich nicht nur zum erhöhen der geschwindigkeit (wie im fall von Tom Duff @ Lucasarts (daher der name!)) verwenden, aber zb auch für daten die nicht genau ein vielfaches einer blockgröße entsprechen (überhang-bytes).. und sicher vieles mehr. Zitat Tom Duff: Many people have said that the worst feature of C is that switches don't break automatically before each case label. This code forms some sort of argument in that debate, but I'm not sure whether it's for or against.
|
watchout
Legendundead
|
ist nicht von mir - es heißt "Duff's Device" und wurde 1983 erfunden. dieses spezielle code-beispiel kopiert einfach nur bytes sequentiell auf einen io-port (bzw eine einzelne speicherstelle) - es dient aber zur demonstration, daß man mittels switch/case an jeder beliebigen stelle einer eines anderen c-blocks (in diesem fall while) einsteigen kann. das funktioniert deshalb, weil am ende eines case-blockes in c nicht automatisch ein break; stattfindet. diese technik läßt sich nicht nur zum erhöhen der geschwindigkeit (wie im fall von Tom Duff @ Lucasarts (daher der name!)) verwenden, aber zb auch für daten die nicht genau ein vielfaches einer blockgröße entsprechen (überhang-bytes).. und sicher vieles mehr. Zitat Tom Duff: Many people have said that the worst feature of C is that switches don't break automatically before each case label. This code forms some sort of argument in that debate, but I'm not sure whether it's for or against. was ich daran krank finde, ist dass hier nicht wie normal eine verschachtelte struktur ist, sondern eine irgendwie miteinander vermixte - das is krank - einfach nur krank, und jetzt hab ich noch einen grund, warum mir 'c' nicht gefällt, ich mein da wird mir ja schlecht dabei... ein bespiel aus php, wo ich mir immer am kopf greifen muss (ich weiss nicht, wie oft ich das schon gesehn hab...): $var = "$string"; oder die beste variante: $string = "$string";
|
FreakyDrOC
Addicted
|
was ich daran krank finde, ist dass hier nicht wie normal eine verschachtelte struktur ist, sondern eine irgendwie miteinander vermixte - das is krank - einfach nur krank, und jetzt hab ich noch einen grund, warum mir 'c' nicht gefällt, ich mein da wird mir ja schlecht dabei... geht in der neuesten version c# auch noch...musst zwar explizit von case zu case hupfen, aber geht aber wer in c# ports programmieren will, ist mir auch rätselhaft
|