------- Additional Comments From ghazi at gcc dot gnu dot org  2005-06-10 12:55 
-------
(In reply to comment #25)
> Subject: Re:  GCC should combine adjacent stdio
>  calls
> On Fri, 10 Jun 2005, ghazi at gcc dot gnu dot org wrote:
> > Case (b) involves fmemopen, and I assume you refer to a case where you open 
> > memory for writing, printf to the resulting FILE*, and pass a pointer to  
> > the memory area back into printf.  This can only lead to disaster as you 
> > clobber the same memory you are reading from.  Since fmemopen is a gnu  
> > extension, it can do whatever it wants, but I suspect you're entering 
> > unspecified territory here for C programs.
> > 
> We support programs which use functions other than the standard C ones - 
> naturally as the compiler for the GNU system we support extensions in the 
> GNU libraries.  The example I gave used %.5s specifically so that it would 
> only look at bytes with known values (if the programmer knows something 
> about the possible values of the integer written) and not at bytes being 
> modified by the printf.

My point about gnu extensions, is that for corner cases like this we don't have 
a reliable standards document to make judgements from.  We're essentially 
relying on the code as a reference implementation.  So "it can do whatever it 
wants."

With regards to "%d" followed by "%.5s", I don't see any difference regardless 
of the buffering mode between two printfs and one in how soon the "%.5s" will 
see the results of the "%d".  In buffered mode, you probably won't see it 
regardless unless you happen to hit BUFSIZ just right.  In unbuffered mode, a 
correctly flushed printf will make the "%d" available.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21982

Reply via email to