2012-01-21 54 views
5

在C你有printf"%c""%f"格式的標誌 - 和scanf樣的功能。這兩個功能使用可變長度參數...,它總是轉換floatsdoublescharsints爲什麼` 「%C」'存在'printf`如果`char`轉換爲`int`?

我的問題是,如果發生這種轉換,爲什麼單獨的標誌爲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:與這個問題相關的是促銷總是適用於可變參數。正如你所說的是「函數聲明不指定參數類型的參數」的子集。 –