No se diferencia. No es posible recibir un float
como vararg: cualquier argumento float
que proporcione se promociona primero al double
.
6.5.2.2/6 define "promociones de argumento predeterminadas", y/7 establece que las promociones de argumento predeterminadas se aplican a "argumentos finales", es decir varargs denotados por ...
.
¿cómo funciona para scanfs/sscanf?
El formato %f
para scanf
requiere un puntero a float
. %lf
requiere un puntero a double
, %Lf
requiere un puntero a long double
.
copiar el valor a una temperatura y fundición (es este derecho?)
Si proporciona un argumento float, a continuación, la aplicación crea un temporal de tipo double, lo inicializa con el valor del flotador, y pasa esto como el vararg. Por definición, el casting es explicita conversión mediante el operador de transmisión; puede transmitirlo si lo desea para que el lector sepa exactamente lo que está sucediendo, pero float f = 3; printf("%f", f);
es exactamente lo mismo que float f = 3; printf("%f", (double)f);
. La promoción del argumento predeterminado tiene el mismo significado que el elenco.
[¿Por qué printf() promociona un flotador a un doble?] (Http://stackoverflow.com/q/28097564/995714) –