Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Printf & ordre des parametres

12 réponses
Avatar
Alain Montfranc
Bonsoir

Existe t'il un moyen de preciser dans le format d'un printf le N° des
arguments utilises (pour permettre un format parametrable par
l'utilisateur)

Du style :

printf ( "%(0)s %(1)s\n", 'Un", "Deux" );

Afficherait "Un Deux"

printf ( "%(1)s %(2)s\n", 'Un", "Deux" );

Afficherait "Deux Un"

J'avais l'impression que ca existait, mais impossible rde retrouver
ca.... Aurai je reve ?

Merci

10 réponses

1 2
Avatar
espie
In article , Alain Montfranc wrote:
Bonsoir

Existe t'il un moyen de preciser dans le format d'un printf le N° des
arguments utilises (pour permettre un format parametrable par
l'utilisateur)

Du style :

printf ( "%(0)s %(1)sn", 'Un", "Deux" );

Afficherait "Un Deux"

printf ( "%(1)s %(2)sn", 'Un", "Deux" );

Afficherait "Deux Un"

J'avais l'impression que ca existait, mais impossible rde retrouver
ca.... Aurai je reve ?


C'est une *extension* frequente.

printf("%2$d %1$dn", 5, 3);

affiche "3 5"

et sur un BSD, et sur un linux.

Avatar
Alain Montfranc
Marc Espie a écrit
In article , Alain Montfranc
wrote:
Bonsoir

Existe t'il un moyen de preciser dans le format d'un printf le N° des
arguments utilises (pour permettre un format parametrable par
l'utilisateur)

Du style :

printf ( "%(0)s %(1)sn", 'Un", "Deux" );

Afficherait "Un Deux"

printf ( "%(1)s %(2)sn", 'Un", "Deux" );

Afficherait "Deux Un"

J'avais l'impression que ca existait, mais impossible rde retrouver
ca.... Aurai je reve ?


C'est une *extension* frequente.

printf("%2$d %1$dn", 5, 3);

affiche "3 5"

et sur un BSD, et sur un linux.


Merci, caca dans les yeux, c'est dans le man :-(

Dodo moi...


Avatar
Jean Pierre Daviau
C'est une *extension* frequente.

printf("%2$d %1$dn", 5, 3);

???



printf("$%2dn$%1dn", 5, 3);


Avatar
espie
In article <I5Rij.2109$,
Jean Pierre Daviau wrote:

C'est une *extension* frequente.

printf("%2$d %1$dn", 5, 3);

???



printf("$%2dn$%1dn", 5, 3);


C'est quoi la question ?

Tu as coupe des bouts de message sans savoir ce que tu faisais ?



Avatar
Alain Montfranc
Jean Pierre Daviau a écrit
C'est une *extension* frequente.

printf("%2$d %1$dn", 5, 3);

???



printf("$%2dn$%1dn", 5, 3);


Nan, %2$d ou %2$2d si tu veux absolument 2 chiffres



Avatar
Jean Pierre Daviau
C'est quoi la question ?
C'est une réponse



printf("%2$d n%1$dn", 5, 3);
%2$d




%1$d
???
printf("$%2dn$%1dn", 5, 3);
$ 5


$3




Avatar
Alain Montfranc
Jean Pierre Daviau a écrit
C'est quoi la question ?
C'est une réponse



printf("%2$d n%1$dn", 5, 3);
%2$d




%1$d


mauvais compilo, changer compilo ;-)

???
printf("$%2dn$%1dn", 5, 3);
$ 5


$3


Ce n'est pas ce qui était recherché





Avatar
Aris
Jean Pierre Daviau a écrit
C'est quoi la question ?
C'est une réponse



printf("%2$d n%1$dn", 5, 3);
%2$d




%1$d


mauvais compilo, changer compilo ;-)

???
printf("$%2dn$%1dn", 5, 3);
$ 5


$3


Ce n'est pas ce qui était recherché


le compilo n'a rien à voir, c'est la libc qui fait ça. Et je suis

curieux de savoir quel melange compilo/libc ne gère pas encore %2$d






Avatar
Alain Montfranc
Aris a écrit
Jean Pierre Daviau a écrit
C'est quoi la question ?
C'est une réponse



printf("%2$d n%1$dn", 5, 3);
%2$d




%1$d


mauvais compilo, changer compilo ;-)

???
printf("$%2dn$%1dn", 5, 3);
$ 5


$3


Ce n'est pas ce qui était recherché


le compilo n'a rien à voir, c'est la libc qui fait ça.



Exact, au temps pour moi

Et je suis curieux de
savoir quel melange compilo/libc ne gère pas encore %2$d


idem







Avatar
Antoine Leca
En news:478cf86c$0$31997$, Aris va escriure:
printf("%2$d n%1$dn", 5, 3);
%2$d




%1$d
mauvais compilo, changer compilo ;-)

le compilo n'a rien à voir, c'est la libc qui fait ça.



Exact.

Et je suis curieux de savoir quel melange compilo/libc ne gère
pas encore %2$d


Tu serais surpris du nombre. Pour moi, il est plus facile de lister les libc
qui acceptent (« gèrent correctement »)

n$ est une invention du comité X/Open (XPG) qui n'a pas vraiment fait mouche
en dehors du monde Unix. Cela (et le reste des trucs liés aux idées i18n des
années 90) a été avalé dans Posix-2001 au titre de la volonté commune de
sortir une seule norme ou au moins une double norme avec le moins de
divergences possibles. Mais dans d'autres mondes où le C n'est pas le centre
du monde, la vision XPG de l'internationalisation n'est pas partagée
unaniment (litote) et beaucoup sont passés olympiquement au travers. Par
ailleurs, un certain nombre de fournisseurs n'ont tout simplement pas
remarqués...

En ce qui concerne n$, cela représente un poids non-négligeable de code et
de cycles inutiles, qui plus est dans une portion de code (printf) qui est
déjà très mal vue pour son embompoint (évidement, cela concerne surtout ceux
qui travaillent avec des bibliothèques liés statiquement).

Par ailleurs, le développement du C s'est quand même beaucoup ralenti depuis
une dizaine d'années, et la norme Posix-2001 n'a encore que 7 ans... (quant
à XPG4, en dehors du monde *nix, qui en fit cas ?) Au total, il est courant
de trouver des bibliothèques standard qui n'ont pas toutes les dernières
fioritures des normes.


Antoine







1 2