Sí, los literales con sufijos también se usan en C.
En C algunos detalles pueden causar confusión al momento de mostrar los valores por la salida estándar, debido al uso de los especificadores de formato. Por ejemplo, este código compilado con MinGW en Linux funciona correctamente:
Pero si se compila con MinGW en Windows (con el mismo comando), la salida para
num5 muestra el valor
-0.000000. Esto ocurre por las diferencias en las implementaciones del compilador GCC y las librerías en tiempo de ejecución de Microsoft. Se puede solucionar el problema en la salida, agregándole al código esta directiva de preprocesador:
Otra opción es agregar un argumento extra al comando de compilación:
gcc -std=c11 -D__USE_MINGW_ANSI_STDIO -o main main.c && main
Otro detalle, en Windows, es el especificador de formato para
num5 (long double). Si se escribe
%lf (con minúsculas), el compilador espera que se le pase un double, por eso aún usando la directiva de preprocesador o el argumento extra en el comando de compilación, muestra como salida
-0.000000. Aunque no sucede en Linux, se puede comprobar que
%Lf es el especificador correcto, agregando un nuevo argumento al comando de compilación para verificar con más detalle los especificadores de formato:
Si no se está usando la directiva de preprocesador:
gcc -std=c11 -Wformat=2 -D__USE_MINGW_ANSI_STDIO -o main main.c && main
Si se está usando la directiva de preprocesador:
gcc -std=c11 -Wformat=2 -o main main.c && main
Si se usa uno de los anteriores comandos, con la línea 20 del código escrita de esta manera:
Se obtiene la advertencia: