tipos imprimir formato float especificadores entre ejemplo diferencia datos c floating-point printf

formato - imprimir float en c



¿Cómo distingue printf y co entre float y double? (1)

No se diferencia. No es posible recibir un float como vararg: cualquier argumento de float que proporcione primero se promueve a double .

6.5.2.2/6 define "promociones de argumentos predeterminados", y / 7 indica que las promociones de argumentos predeterminados se aplican a "argumentos finales", es decir, varargs denotado por ...

¿Cómo funciona para scanfs / sscanf?

El formato %f para scanf requiere un puntero para float . %lf requiere un puntero para double , %Lf requiere un puntero para long double .

copiando el valor a una temperatura y casting (¿es esto correcto?)

Si proporciona un argumento flotante, la implementación crea un temporal de tipo doble, lo inicializa con el valor flotante y lo pasa como vararg. La conversión por definición es una conversión explícita por el uso del operador de conversión: puede realizar la conversión si lo desea para que el lector pueda ver con claridad lo que está pasando, pero float f = 3; printf("%f", f); float f = 3; printf("%f", f); es exactamente lo mismo que float f = 3; printf("%f", (double)f); float f = 3; printf("%f", (double)f); . La promoción de argumentos predeterminada tiene el mismo significado que la conversión.

Dado que no está muy tipeado, pensé que solo había elegido el tamaño de memoria correcto y lo había interpretado según el tipo de argumento. Pero flotar y doblar usan% f y son de diferentes tamaños.

PS Puedo ver cómo podría funcionar la promoción a través de la copia del valor a un temp y casting (¿está bien?) Pero, ¿cómo funciona para scanfs / sscanf?