我最近读了打印字符时会发生哪些积分促销活动?
unsigned char x=1;
printf("%u",x);
调用不确定的行为,因为由于格式说明%U,预计的printf一个unsigned int。但是我仍然想知道这个例子中发生了什么。
我认为积分促销规则适用于表达式printf("%u",x)
和x
表示的值。
A.6.1积分促进
字符,短整数,或整数位字段中,所有符号或没有,或枚举类型的 对象,可以在表达式无论使用可以使用整数。 如果int可以表示原始类型的所有值,则该值将被转换为 为int;否则该值将转换为unsigned int。这个过程被称为积分 促销。
“可能被使用”是什么意思?这是否意味着'语法正确'或'是定义的行为'?
在这个例子中x如何被提升?我已阅读,它提升为int,但如果printf("%u", (int x))
仍然是不确定的行为,然后我真的不明白为什么...
我认为这个行为的确是有定义的,因为你提到的原因。 –
[推荐观看](http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-7-of-n) –
@luserdroog:所以你认为“可能被使用”是指应该定义行为?或者我错过了你的观点? – lee77