Date: Wed, 22 Mar 2000 14:55:58 +0100
From: Marcus Brinkmann [EMAIL PROTECTED]
To: Michal Fecanin Araujo [EMAIL PROTECTED]
Cc: Debian Development List debian-devel@lists.debian.org
Subject: Re: Compiling Error
On Wed, Mar 22, 2000 at 01:15:01PM +, Michal Fecanin Araujo wrote:
--
#include stdio.h
FILE *output=stderr;
int main()
{
fprintf(output,Hello World\n);
}
--
The problem is that its not possible to initialize output with stderr
because it is not a constant. Is there any solution to this without
modification of the code, only with gcc options.
No. Your code is invalid, and it should be fixed. You already know the fix.
Now you just have to accept it.
This is an interesting problem which was raised on the pgcc mailing list
last year. Check out my reply to someone's question:
http://www.delorie.com/archives/browse.cgi?p=pgcc/1999/10/23/23:19:18
and Marc Lehmann's answer:
http://www.delorie.com/archives/browse.cgi?p=pgcc/1999/10/24/19:18:25
summary: C is annoying like that, but if you want to have
static FILE *errfile = stderr;
in a library, but have it be legal C (!), you can use GNU C constructors, or
you can
static FILE *errfile = NULL;
#define errfile (errfile?errfile:stderr)
This is easier than explicitly checking at the top of every function which
uses it. I ran into this problem when hacking the Linux-lab-project
http://www.llp.fu-berlin.de/ GPIB drivers for a glibc 2.1 system (rh6.0).
--
#define X(x,y) x##y
DUPS Secretary ; http://is2.dal.ca/~dups/
Peter Cordes ; e-mail: X([EMAIL PROTECTED] , dal.ca)
The gods confound the man who first found out how to distinguish the hours!
Confound him, too, who in this place set up a sundial, to cut and hack
my day so wretchedly into small pieces! -- Plautus, 200 BCE