printf の man ページを調べていたところ、何かが思い浮かびました。比較的簡単な質問に答えることができる「言語弁護士」がここにいるかどうか疑問に思っていました:-P.
したがって、「t」修飾子は次のように定義されます
次の整数変換は、ptrdiff_t 引数に対応します。
これを符号なし整数変換と組み合わせるとどうなるでしょうか? 明らかに、o、u、x、X はすべて符号なしの値として解釈されることを意図していますが、d と i は符号付きです。
同様にsize_t
、.ssize_t
ptrdiff_t
実際には、型の署名されていないバージョンは署名されたバージョンと同じ量のスペースを占有するため、悪いことは何も起こりません。したがって、適切なバイト数がスタックからポップされます。
したがって、「悪い」ことは何も起こりません。実際には、「」を除くすべてのテスト対象の期待値が出力されますINT_MIN
( sizeof(int) == sizeof(ptrdiff_t)
.
printf("%tu %td\n", INT_MIN, INT_MIN);
版画
2147483648 -2147483648
32 ビット システムで。
規格はこれについて意見を持っていますか? 答えは「未定義の動作」になると思います。しかし、私は尋ねると思いました;)。