2012-01-21 53 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:与这个问题相关的是促销总是适用于可变参数。正如你所说的是“函数声明不指定参数类型的参数”的子集。 –