2

C で整数から char への暗黙的なキャストが可能なのはなぜですか?

たとえば、次の場合:

int i = 2789;

printf("%c\n",i);

最も重要なビットから始まるビットが切り捨てられるため、char が返されます。しかし、通常、精度が失われることを意味する場合、暗黙的にキャストすることはできません。なぜここでキャストできるのでしょうか?

4

2 に答える 2

6

ここでは暗黙のキャストは行われません。

printfこれは、関数が呼び出される前に型の引数charが変換されることを意味します。int引数は既に typeintであるため、変換は行われません。

于 2013-09-28T16:16:25.183 に答える
0

関数に渡されるすべての整数引数は、通常、CPU のワード サイズに昇格されるため、charshortintまたはを渡すかどうかに関係なくlong、エントリ時のスタックおよび/またはレジスタの物理レイアウトはprintfいずれにせよ同じです。

したがって、「キャスト」は行われず、通常の引数の受け渡しのみが行われます。

ただし、コードが正しいとは限りません。引数の受け渡しと型の昇格は、C ではなく ABI で定義されているため、すべてのプラットフォームで機能するとは限りません。(ただし、大多数で機能します。)

于 2013-09-28T16:18:18.347 に答える