Printf & ordre des parametres

Le
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", 'Un", "Deux" );

Afficherait "Un Deux"

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

Afficherait "Deux Un"

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

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #1002070
In article
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.

Alain Montfranc
Le #1002069
Marc Espie a écrit
In article 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...


Jean Pierre Daviau
Le #1001889
C'est une *extension* frequente.

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

???



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


espie
Le #1001719
In article Jean Pierre Daviau

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 ?



Alain Montfranc
Le #1001718
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



Jean Pierre Daviau
Le #1001716
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




Alain Montfranc
Le #1001715
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é





Aris
Le #1001714
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






Alain Montfranc
Le #1001713
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







Antoine Leca
Le #1001712
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







Publicité
Poster une réponse
Anonyme