あまり意識しない事が多いような気がするけど、C言語のprintf()では、書式文字列とそれに該当する引数の型が一致していないといけない。
%dはintを扱うので、shortやlongを渡してはいけない。
ただ、intが32bitでlongも32bitだったりすると、longを渡しても動いてしまう。また、引数1つが最低32bit(int1個分)を確保するような実行環境なら、shortやcharを渡しても動くかもしれない。
%p(アドレス表示用)の存在も意外と知られていない気がする。
%xで代用できると言えば代用できるが、上述の通り、環境によっては、引数の長さがライブラリーの想定している長さと不一致になってしまう為、おかしな値が表示される。それどころか、暴走することもあるかも(苦笑)
※コメント投稿者のブログIDはブログ作成者のみに通知されます