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 別のやり方を書きました。人それぞれ。