我只是在浏览 printf 的手册页,我发生了一些事情。我想知道这里是否有任何“语言律师”可以回答一个相对简单的问题:-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 位系统上。
标准对此有何看法?我认为答案将是“未定义的行为”。但我想我会问;)。