Oui bien sûr, mon exemple c'était pour faire simple. Il faut autant que possible traduire des phrases complètes. Mais il y a toujours des cas où certains éléments de la phrase ne sont pas connus à la compilation. Effectivement on peut en général s'en sortir à coups de deux points suivits du truc variable.
Néamoins ma question était plus générale, et ne se pose pas que pour l'internationalisation des messages. Je voulais juste savoir s'il y avait un moyen standard d'utiliser les arguments dans un ordre autre que celui du format, et apparement la réponse est non.
La notation "n$" est bien pratique aussi pour n'avoir à passer qu'un fois un paramètre qui doit apparaitre plusieurs fois dans le message. Par exemple, pour afficher un chaine qui n'est pas terminée par un 0, ainsi que la longueur de la chaine, on peut faire :
printf("str=%2$.*1$s len=%1$d\n", len, str);
Qui est plus maintenable que la solution sans $, qui nécessite de répéter un argument :
printf("str=%.*s len=%d\n", len, str, len);
Partager