Semi-reserved namespace, revisited

Karl Heuer karl at haddock.ima.isc.com
Thu Mar 30 13:50:14 AEST 1989


The pANS says that the _[a-z0-9] namespace may be used by the implementation
for external identifiers.  (In contrast with the _[_A-Z] namespace, which
reserves all identifiers.)  I presume this means that the application is
permitted to use these names for non-external identifiers.  Thus, the
following program seems to be strictly conforming:
	#include <stdio.h>
	int main(void) {
	    char *_iob;
	    fprintf(stdout, "goodbye, world!\n");
	    return 0;
	}
If so, this implies that the common implementation of <stdio.h> is illegal (it
causes the above program to die horribly, because stdout is a macro that
references the name _iob).  Is this correct?

Does this also extend to application macros, since they have no linkage?  If
the program
	#define _ptr char *
	#include <stdio.h>
	int main(void) { return 0; }
is strictly conforming, it implies that <stdio.h> may not use _ptr as a struct
member; more generally, any undocumented identifier that actually appears in a
standard header, in *any* context%, must be from the _[_A-Z] namespace.

Are implementors prepared to make these modifications to the common headers?

Karl W. Z. Heuer (ima!haddock!karl or karl at haddock.isc.com), The Walking Lint
________
%The only exception I can think of is a formal argument in a macro definition.



More information about the Comp.std.c mailing list