【发布时间】:2017-12-12 07:24:50
【问题描述】:
如果我像这样使用错误的格式说明符:
unsigned int i = -1;
printf("%d\n", i);
它被调用未定义的行为,因为%uunsigned 的格式说明符。
C11 标准§ 7.21.6.1(P9):
如果转换规范无效,则行为是 undefined.282) 如果任何参数不是正确的类型 相应的转换规范,行为未定义。
但是,如果我这样写:
unsigned int i = -1;
printf("%d\n", (int)i); // unsigned to signed
这也是未定义的行为吗?
【问题讨论】:
-
你可能错过了一些 language-lawyer 标签
-
一个有符号整数总是可以被解释为一个无符号整数,除非你有一些带有补码和陷阱表示的奇异废话系统。
-
重新打开 - 链接的问题是关于已签名到未签名的,而这是关于未签名到已签名的,这是不同的。 (这有一个很好的答案)
标签: c language-lawyer format-specifiers