簡體   English   中英

在 `printf` 中使用標簽 `h` 或 `hh` 是否涉及未定義的行為?

[英]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指定后面的diouxX轉換說明符適用於有符號字符或無符號字符參數(參數將根據整數提升而提升,但其值應打印前轉換為有符號字符或無符號字符); 或者后面的 n 轉換說明符適用於指向有符號字符參數的指針。

所以不,沒有未定義的行為。 該標准很清楚,可變參數函數的char參數將被提升為int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM