题
我只是在找通过人页printf和某事发生在我身上。我想知道如果有任何"语言的律师"在这里可以回答一个相对较简单的问题:-P.
这样的't'修改定义为
一下整数,转换 相当于一个ptrdiff_t的论点。
是什么 应该 发生,如果你把这个带unsigned integer转换?显然o,u和X的所有所有的旨在将被解释为未签署的价值观,而在d和我签署。
同样,还有签署/unsigned版本的所有改进剂(int/unsigned int, size_t
/ ssize_t
, 等)除了 ptrdiff_t
.
在实践中,没有什么不好的事情发生,因为无符号版本的类型占据相同数量的空间签订的版本。这样的权利有关的字节获得弹出叠。
所以没有什么"坏"的情况,事实上,在印刷品的预计价值为所有的事情进行测试,除了"INT_MIN
"(假设 sizeof(int) == sizeof(ptrdiff_t)
.
printf("%tu %td\n", INT_MIN, INT_MIN);
印刷品
2147483648 -2147483648
在一个32位系统。
不准有任何的意见吗?我想答案是"不确定的行为。" 但我想我会要求;).
解决方案
什么都看不到这里。代码你已经写入法律。
只是一些事实,至于为什么:
- 所有签署整数类型有未签署的对应方,同样的尺寸/准的要求
ptrdiff_t
规定须签署整数类型的标准。因此,它有一个未签署的双胞胎。(事实上,类似的逻辑也适用于size_t
作为良好ssize_t
不是C,但POSIX)- 的
t
长说明必须工作d
,i
,o
,u
,x
,X
类型
不隶属于 StackOverflow