printf格式,用于两个无符号整数的差值

Vek*_*eky 1 c printf ansi unsigned-integer

在纯ANSI C(C89)中,我有以下内容.

unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);
Run Code Online (Sandbox Code Playgroud)

%绝对肯定会打印后放入什么3?我可以在这里看到两者的参数%u(如果两个操作数都是无符号的结果)和%d(int在传递参数时将积分表达式转换为printf).

当然,两者都适用于任何合理的编译器,这正是我在这里问的原因.:-)我感觉只有一个是真正正确的标准(但即使这可能是错误的).

小智 5

无符号.使用%u.在积分表达式上执行默认促销时(因为printf()它是一个可变参数函数),不会发生无符号签名转换.