Forward Referencing of Static Variables OK?

Mike Banahan mikeb at inset.UUCP
Tue Oct 8 20:14:43 AEST 1985


The orginal article asked what should happen in this sort of case:

/***********************************/
extern int xxx;

f(){
	xxx = 1;
}

static int xxx;	/* `extra' information about xxx */
/***********************************/

The ANSI committee had a lot of work to do on this one.
There is an even worse issue than that:

/***********************************/
f(){
	{
	extern int xxx;	/* OH BOY!!! - where am I visible? */
			/* Am I really extern? */
	}
}

y(){
	/* can I use xxx in here ???? */
}
/***********************************/

They had to come up with a lot of words to fix that stuff - basically, it
just wan't written down anywhere what was supposed to happen. Bill Plauger
described the whole mess as ``Driving a coach and horses through block
structure.'' The more I look at it, the more I agree.

X3J11 has come up with a set of answers on what should happen. Because
nobody really ``knew'' before, you just get what your compiler happens to
give you. Be warned - it is *highly* nonportable practice, because
different compilers currently do different things. This is one area
where the language was already broken. The standard has chosen one way
of patching it.
-- 
Mike Banahan, Technical Director, The Instruction Set Ltd.
mcvax!ukc!inset!mikeb



More information about the Comp.lang.c mailing list