我刚刚在查看printf的手册时突然想到了一个问题。我想知道是否有任何“语言律师”可以回答一个相对简单的问题:-P。
因此,'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))。
因此,'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位系统上,标准对此有何看法?我觉得答案可能是“未定义行为”。但我想问一下;)