Compte tenu de la norme C99 (à savoir le projet N1256 ), les règles dépendent du type de fonction: fprintf (printf, sprintf, ...) ou scanf.
Voici les parties pertinentes extraites:
Préface
Cette deuxième édition annule et remplace la première édition, ISO / IEC 9899: 1990, telle que modifiée et corrigée par ISO / IEC 9899 / COR1: 1994, ISO / IEC 9899 / AMD1: 1995 et ISO / IEC 9899 / COR2: 1996. Les principaux changements par rapport à l'édition précédente incluent:
%lf
spécificateur de conversion autorisé dans printf
7.19.6.1 La fprintf
fonction
7 Les modificateurs de longueur et leurs significations sont:
l (ell) Spécifie que (...) n'a aucun effet sur un spécificateur de conversion a, A, e, E, f, F, g ou G suivant.
L Spécifie qu'un spécificateur de conversion a, A, e, E, f, F, g ou G suivant s'applique à un argument long double.
Les mêmes règles spécifiées pour fprintf
appliquer pour printf
, sprintf
et des fonctions similaires.
7.19.6.2 La fscanf
fonction
11 Les modificateurs de longueur et leurs significations sont:
l (ell) Spécifie que (...) qu'un spécificateur de conversion a, A, e, E, f, F, g ou G suivant s'applique à un argument dont le pointeur de type est double;
L Spécifie qu'un spécificateur de conversion a, A, e, E, f, F, g ou G suivant s'applique à un argument avec un pointeur de type sur double long.
12 Les spécificateurs de conversion et leurs significations sont: a, e, f, g Correspond à un nombre à virgule flottante éventuellement signé, (...)
14 Les spécificateurs de conversion A, E, F, G et X sont également valides et se comportent de la même manière que respectivement a, e, f, g et x.
La longue histoire courte, pour fprintf
les spécificateurs suivants et les types correspondants sont spécifiés:
%f
-> double
%Lf
-> long double.
et fscanf
c'est:
%f
-> flotter
%lf
-> double
%Lf
-> long double.
"%lf"
n'est pas défini; dans les bibliothèques C99 et C11, il est défini comme étant identique à"%f"
.