Subject: Re: quick question to C programmers
To: Georg Schwarz <>
From: Hauke Fath <>
List: tech-pkg
Date: 04/07/2005 17:50:39
Am 07.04.2005 um 17:32 Uhr +0200 schrieb Georg Schwarz:
>  > >#include <stdio.h>
>>  >FILE *a = {stdin}, *b = {stdout};
>>  Interesting. Works fine for me with both gcc 3.3.3 (i386 netbsd-2)
>>  and egcs-1.1.2 (mac68k netbsd-1-5-4).
>>  The preprocessor output has
>>  FILE *a = { (&__sF[0]) }, *b = { (&__sF[1]) };
>>  in both cases, so the curly braces look redundant.
>so I ran this on a few machines (compiling cc -c):


>Is there maybe some additional include missing to the code for Linux and

That's why I asked for the preprocessor output... As listed above, 
NetBSD uses a constant array for stdin, stdout. When I search the 
preprocessor output on a debian linux (gcc 3.3.5), I get an

extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;

which looks not necessarily constant for gcc. So it looks like you 
are stumbling over libc stdio implementation details here.


/~\  The ASCII Ribbon Campaign                    Hauke Fath
\ /    No HTML/RTF in email	        Institut für Nachrichtentechnik
  X     No Word docs in email	                  TU Darmstadt
/ \  Respect for open standards              Ruf +49-6151-16-3281