労働中

明日は長距離ドライブだというのに今夜も徹夜かしらん。去年も言ってた気がするなぁ。
まぁおかげさまで私のバグは取れた模様。あと小さな、でもガックリするようなバグも見つけた。

unsigned long l;
unsigned long long ll;
snprintf(buf,len,"%lu %llu",l,ll);

めっさ簡単に書くとこんな感じのコードだった。これがあるマシンで動かない。よく考えたらこれがamd64なマシンなのだった。%luは%uでなくてはならない。
もはや身の回りにintが16bitなマシンはないので、頭切り替えなきゃなぁと思った次第。
追記:なんか最後の行に「?」と思った人がいたらしい。16/32bitでportableに書こうとしている間はlongを%ldで受けるのが正しい。長年の癖でこっちになってる。でも32/64bitでportableにしようとすると%dが正しい。それだけの話。16/32/64でportableにしようとするとsizeofで分けるしかないのかなぁ。
あれ勘違い?積むときはint拡張すると思ってたんだけど。pending