Dado el estándar C99 (es decir, el borrador N1256 ), las reglas dependen del tipo de función: fprintf (printf, sprintf, ...) o scanf.
Aquí se extraen las partes relevantes:
Prefacio
Esta segunda edición cancela y reemplaza la primera edición, ISO / IEC 9899: 1990, según enmendada y corregida por ISO / IEC 9899 / COR1: 1994, ISO / IEC 9899 / AMD1: 1995 e ISO / IEC 9899 / COR2: 1996. Los principales cambios de la edición anterior incluyen:
%lf especificador de conversión permitido en printf
7.19.6.1 La fprintffunción
7 Los modificadores de longitud y sus significados son:
l (ell) Especifica que (...) no tiene efecto en un siguiente especificador de conversión a, A, e, E, f, F, g o G.
L Especifica que el siguiente especificador de conversión a, A, e, E, f, F, g o G se aplica a un argumento doble largo.
Las mismas reglas especificadas para fprintfsolicitar printf, sprintfy funciones similares.
7.19.6.2 La fscanffunción
11 Los modificadores de longitud y sus significados son:
l (ell) Especifica que (...) que el siguiente especificador de conversión a, A, e, E, f, F, g o G se aplica a un argumento con puntero de tipo a doble;
L Especifica que el siguiente especificador de conversión a, A, e, E, f, F, g o G se aplica a un argumento con puntero de tipo a doble largo.
12 Los especificadores de conversión y sus significados son: a, e, f, g Coincide con un número de punto flotante opcionalmente firmado, (...)
14 Los especificadores de conversión A, E, F, G y X también son válidos y se comportan igual que, respectivamente, a, e, f, gy x.
La larga historia corta, para fprintflos siguientes especificadores y tipos correspondientes se especifican:
%f -> doble
%Lf -> largo doble.
y por fscanfeso es:
%f -> flotador
%lf -> doble
%Lf -> largo doble.
"%lf"no está definido; en las bibliotecas C99 y C11 se define como igual que"%f".