long double
って何バイトなの? sizeof(FILE)
っていくつ? 調べようと思えばなんてことはないことを調べるのが面倒。どうにかしてくれ、おまえらコンピュータだろう?
そんなあなたの素朴かつ誠実な疑問に応えるためのスクリプトがcprintf.shだ。
# cprintf.sh 'sizeof(FILE)' sizeof(FILE)=148(0x94) # cprintf.sh -i stdlib.h -i sys/time.h -p 'struct timeval tv;gettimeofday(&tv, NULL);' \ tv.tv_sec tv.tv_usec tv.tv_sec=1080281038(0x4063c7ce) tv.tv_usec=855943(0xd0f87) # cprintf.sh -p '#define rdtsc(a) asm("rdtsc":"=A"(a))' -p 'long long a=0;' -p 'rdtsc(a);' \ '(unsigned int)(a>>32)' '(unsigned int)a&0xffffffff' (unsigned int)(a>>32)=2433(0x981) (unsigned int)a&0xffffffff=-161508906(0xf65f91d6)
printfのフォーマット文字列が%d(%#x)に固定されているのがちょいと問題であることがうかがえる。オプション増やそうかな…
(追記) 2004-03-26 15:32
別のやり方を書きました。人それぞれ。