我最近讀了打印字符時會發生哪些積分促銷活動?
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