printfのマニュアルページを見ていて、何かが私に起こりました。私は、比較的簡単な質問に答えることができる "言語弁護士"がいるかどうか疑問に思っていました。互換性のないprintf書式指定子に関する質問
Soは 'T' 修飾子は
がptrdiff_tの引数に対応する整数変換として定義されます。
だから、これを符号なし整数変換と組み合わせるととなると思いますか?明らかに、o、u、x、およびXはすべて符号なしの値として解釈され、dとiは符号付きです。
同様に、ptrdiff_t
を除くすべての修飾子(int/unsigned int、size_t
/ssize_t
など)には符号付き/符号なしのバージョンがあります。
実際には、署名されていないバージョンのタイプは署名されたバージョンと同じ量のスペースを占めるため、何も悪いことはありません。だから、バイトの権利はスタックからポップされます。
だから、何も "悪い" のプリントで、実際には、 "INT_MIN
" を除いて、試験した全てのものの期待値を起こりません(と仮定sizeof(int) == sizeof(ptrdiff_t)
いる。
printf("%tu %td\n", INT_MIN, INT_MIN);
プリント上
2147483648 -2147483648
32ビットシステム
標準についてはこれについて意見がありますか?私は答えが "未定義の動作"になると考えています。
と協力しなければならない
ptrdiff_tはC++のcstddefで定義されています。 printfは明らかにC++にも存在します。私はprintfを変更してもC++ 0xを意識していません。 –
hrmm、C++にc99 't'修飾子がないようです。けっこうだ。 –