11

私は最近それを読みました

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))まだ未定義の動作である場合、その理由がよくわかりません...

4

3 に答える 3