![](/img/trans.png)
[英]Does the 'offsetof' macro from <stddef.h> invoke undefined behaviour?
[英]Does using tag `h` or `hh` in `printf` involves undefined behaviour?
例如,這樣的代碼可能很有用:
unsigned char ch = 0xf2;
printf("%02hhx", ch);
但是,當作為可變參數函數printf
的參數傳遞時, ch
被提升為int
。 因此,當使用%hhx
時,類型不匹配。 根據 C 標准,這里是否涉及任何未定義的行為? 如果是C++呢?
這里有一些討論,但沒有給出答案。
C11標准說:
7.21.6.1/7
hh
指定后面的d
、i
、o
、u
、x
或X
轉換說明符適用於有符號字符或無符號字符參數(參數將根據整數提升而提升,但其值應打印前轉換為有符號字符或無符號字符); 或者后面的 n 轉換說明符適用於指向有符號字符參數的指針。
所以不,沒有未定義的行為。 該標准很清楚,可變參數函數的char
參數將被提升為int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.