Whilst porting some code from the net I came across
the attached, rather obscure, code.
run as:
larch% 8c -D 'STATIC=static' t.c && 8l t.8 && 8.out
78780000
larch% 8c -D 'STATIC=' t.c && 8l t.8 && 8.out
0
I think it is tickling a bug in 8c, though
I may be just showing my lack of knowledge of
the C standard...
anyone any thoughts?
-Steve#include <u.h>
#include <libc.h>
static uint getdword_n(void *mem, int n)
{
STATIC uint tmp = 0;
switch (n)
{
case 3:
((uchar*)&tmp)[1] = ((uchar*)mem)[2];
case 2:
((uchar*)&tmp)[2] = ((uchar*)mem)[1];
case 1:
((uchar*)&tmp)[3] = ((uchar*)mem)[0];
default:
break;
}
return tmp;
}
void
main(void)
{
uint x;
char buf[] = "xxxx";
x = getdword_n(buf, 2);
print("%x\n", x);
}