c - 为什么 '+' 符号不能与 printf 一起用于无符号值?

标签 c printf unsigned stdio conversion-specifier

我刚刚编写并运行了以下程序。这只是给出了一个意想不到的输出,没有将 + 符号打印到 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/

相关文章:

c - 将所有出现的 % 替换为 %% ?需要一个函数吗?

c - 如何分配内存给 int (*a)[2]?

c - 将未知长度的格式化数据写入字符串(C编程)

c++ - "unsigned"关键字

c - 从字符串传递到 unsigned short

java - Java 8 中处理 "unsigned"整数的想法

c - 字符串转换时 strtol 结果不匹配

c - 为什么以下代码的输出为零?

c - 像 C 中的 printf 这样的函数参数

将 byte/int8 数组元素复制到 char 数组