お世話になりますCS+のRX63Tで開発しています以下のようなソースですが int a; long b; a=-5; b=(long)a; printf("a=%d(%04X) b=%ld(%08lX) \r",(int)a,(int)a,b,b); printf("%d \r",(int)sizeof(a));これを実行するとa=-5(FFFFFFFB) b=-5(FFFFFFFB) 2 が表示されますintのサイズが2Byteであるにもかかわらずprintfで指定した%04Xが無視されて4Byte分のFFFFFFFBが表示されております、これはC言語の仕様なのでしょうか?
IKUZOさん 自分も誤解していたけど、出力幅には最小値を与える事になっているらしいです。 出力幅より長くなれば勝手にチョン切らないでそのまま出す事になります。 他も同じみたいです。(”ANSI printf width”なんかでググると解ります)
> printf("a=%d(%04X) b=%ld(%08lX) \r",(int)a,(int)a,b,b); printf("a=%hd(%04hX) b=%ld(%08lX) \r",a,a,b,b); で期待された結果にならないですか?
https://wandbox.org/permlink/ZfcYrzwwLc6cz4WW
fujitaさんが別のスレッドで「知識は大したことありませんが不明点は確認するよう心がけています。」と書き込まれてます。私には耳の痛い話です。ついつい面倒になって未確認で済ませてしまいます。 少し読みづらい構成ですがCC_RXのprintfはCC-RXコンパイラユーザーズマニュアルに書かれていることがすべてだと思います。逆に抜け漏れがあるとか具体的なわかりづらい点があるならかふぇルネに書き込むのは有効だと思います。私はそれぞれのコンパイラーのマニュアルと詳説C言語とプログラム言語CのみでANSI規格を読んだことがありませんが、一般論のprintfならANSI規格で確認するのがベストに思えます。
IKUZOさん 確認方法の違いだけで、誰かに聞くか、書類を見るか。かな。 そもそも何が分からないか、が分からないと何もできませんし^^;気楽で良いと思いますよ。
面白そうなスレッドなら反応するけど、興味がなかったら反応しませんし、フォーラムなんてそんなもんでしょう:-P