2012-01-21 13 views
5

Cではprintf - とscanfのような機能のために"%c""%f"のフォーマットフラグがあります。どちらの関数も可変長引数...を使用し、常にfloatsdoublescharsからintsに変換します。`` char``を `int`に変換すると` `%c" `が` printf`に存在するのはなぜですか?

この変換が発生すると、charfloatのフラグが別々になるのはなぜですか? intdoubleと同じフラグを使用するだけではどうですか?

関連質問:
Why does scanf() need "%lf" for doubles, when printf() is okay with just "%f"?

答えて

8

それはプリントアウトします方法が異なるため。

printf("%d \n",100); //prints 100 
printf("%c \n",100); //prints d - the ascii character represented by 100 
+0

ああ..明らかに。しかし、「フロート」はどうですか? –

+3

@PaulManta: '%f'フォーマットフラグは' double'引数を必要とします。 –

0

ためfloatdoubleは、別のマシン表現やサイズ、および呼び出し規約を持っている:多くのプロセッサは、引数を渡すために使用される可能性があります浮動小数点専用のレジスタを持っています。

そして、Cの標準では、shortの引数がintに変換され、floatの引数がdoubleに変換されることが必要です。

+1

これらの変換は、関数の宣言でパラメータの型が指定されていない引数に対してのみ、すべての引数に対して行われるわけではありません。 –

+0

@Keith:この質問に関連するのは、プロモーションが常にvarargsに適用されるということです。あなたが言うように、 "関数宣言がパラメータ型を指定しない引数"のサブセットです。 –

関連する問題