This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: snprintfv 1.1 pre-release


Bruce Korb wrote:

"Joseph S. Myers" wrote:


On Thu, 24 Jul 2003, Paolo Bonzini wrote:


* there is support for width/precision positional parameters (%NNN$s was
supported in 1.0 too), like

printf ("%2$*1$s", "fubar", -10);


This, of course, being an erroneous example, taking "fubar" as the width
and -10 as the string to be formatted.


Well, I confess I don't know what is right.  What you say, Joseph, corresponds
to my reading of the standard.  However, in experiments with Sun's libc and
Linux's glibc:

I'm not sure why this got sent to the Austin group list; and perhaps I'm missing some important context, but...

$ cat xx.c
#include <stdio.h>

int
main( int argc, char** argv )
{
   printf( "%%2$*1$d:  ==%2$*1$d==\n", 11, 22 );
   printf( "%%1$*2$d:  ==%2$*1$d==\n", 11, 22 );
   printf( "%%*d:      ==%2$*1$d==\n", 11, 22 );

Excuse me, but why are all the actual formatting strings identical? It appears that it's doing exactly what you told it to do. I think you must have INTENDED to do this:

   #include <stdio.h>
   int
   main( int argc, char** argv )
   {
       printf( "%%2$*1$d:  ==%2$*1$d==\n", 11, 22 );
       printf( "%%1$*2$d:  ==%1$*2$d==\n", 11, 22 );
       printf( "%%*d:      ==%*d==\n", 11, 22 );
       return 0;
   }

That is, on each line REPORT and USE the same formatting. Yes?

return 0;
}
$ cc -o xx xx.c $ ./xx
%2$*1$d: == 22==
%1$*2$d: == 22==
%*d: == 22==
$ gcc -o yy xx.c
$ ./yy
%2$*1$d: == 22==
%1$*2$d: == 22==
%*d: == 22==


I'm pretty sure that something has to be wrong.  What?  Can we say
that both are in non-compliance and the results should be this?

%2$*1$d: == 22==
%1$*2$d: == 11==
%*d: == 22==


On Tru64, when I build and run the program you posted I get exactly what you report Solaris and Linux doing. But when I correct the program to do what it says, I get what you expect. I suspect you'll find the same results. (I certainly do on our ancient Solaris 2.6 system; I didn't bother trying on Linux.)

--
/--------------------[ David.Butenhof@hp.com ]--------------------\
| Hewlett-Packard Company       Tru64 UNIX & VMS Thread Architect |
|     My book: http://www.awl.com/cseng/titles/0-201-63392-2/     |
\----[ http://homepage.mac.com/dbutenhof/Threads/Threads.html ]---/



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]