我刚刚编写并运行了以下程序。这只是给出了一个意想不到的输出,没有将 +
符号打印到 U...MAX
。
#include <limists.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
// ...
printf("LLONG_MIN: %+lli\n", LLONG_MIN);
printf("LLONG_MAX: %+lld\n", LLONG_MAX);
printf("ULLONG_MAX: %+llu\n", ULLONG_MAX);
return EXIT_SUCCESS;
}
我得到了这个:
CHAR_BIT: 8
SCHAR_MIN: -128
SCHAR_MAX: +127
UCHAR_MAX: 255
SHRT_MIN: -32768
SHRT_MAX: +32767
USHRT_MAX: 65535
INT_MIN: -2147483648
INT_MAX: +2147483647
UINT_MAX: 4294967295
LONG_MIN: -2147483648
LONG_MAX: +2147483647
ULONG_MAX: 4294967295
LLONG_MIN: -9223372036854775808
LLONG_MAX: +9223372036854775807
ULLONG_MAX: 18446744073709551615
为什么U..._MAX
没有打印+
符号?
我该怎么做?
最佳答案
此功能在标准中的记录相当少,我们只能阅读此 (7.21.6.1):
+
The result of a signed conversion always begins with a plus or minus sign. (It begins with a sign only when a negative value is converted if this flag is not specified.)
我的看法是,这应该被解读为 +
后面必须始终跟有符号的数字转换说明符,例如 %d
或 %f
。您使用了无符号说明符 %u
所以我认为您的代码具有未定义的行为,因为它混合了 +
和 %u
。
关于c - 为什么 '+' 符号不能与 printf 一起用于无符号值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69314212/