私は最近それを読みました
unsigned char x=1;
printf("%u",x);
フォーマット指定子 %u により、printf は unsigned int を予期するため、未定義の動作を呼び出します。それでも、この例で何が起こっているのかを理解したいと思います。
printf("%u",x)
で表される式と値で整数昇格規則が適用されると思いますx
。
A.6.1 インテグラル昇格
文字、short 整数、または整数ビットフィールド (すべて符号付きかどうかに関係なく)、または列挙型のオブジェクトは、整数を使用できる式で使用できます。int が元の型のすべての値を表すことができる場合、値は int に変換されます。それ以外の場合、値は unsigned int に変換されます。このプロセスは統合プロモーションと呼ばれます。
ここでいう「使える」とは?「構文的に正しい」または「動作が定義されている」という意味ですか?
そして、この例で x はどのように昇格されますか? int に昇格されることを読みましたが、printf("%u", (int x))
まだ未定義の動作である場合、その理由がよくわかりません...