[net.lang.c] Qualified Names mean you don't break the C Library

idallen@watmath.UUCP (07/24/84)

If you don't have unique names for things like printf and getchar,
names that are identifiable so that no programmer will use them by
mistake, then you can never have one C Library routine call another C
Library routine, because the called routine might have been
accidentally redefined to do something that the Library doesn't
expect.  If I write a do-nothing function called malloc() and put it in
my program, every C Library routine that uses malloc() breaks.  This is
a bad thing.  I do not want to have to learn all the names of every
routine that ever is, was, or will be put in the C Library.  I want to
be told "if you never use an external name like such-and-so, you will
never break the library".  The C Library should be calling a special
internal name for malloc(); not a simple external name that you
are likely to stumble across.  If you *really* want to redefine the
Library's malloc, you redefine the internal name -- but, it is very
clear (by the form of the name) that you are doing something special.

The B Programming Language has reserved identifiers containing a
period for internal system use.  My programs call printf() -- the
library always calls .prntf().  If I never use an external with a
period in it, I never mess up the library.

Of course, this only works like this because most programs are
two-tiered -- my source, and the library.  When you start to apply
this to different libraries, each needing its own convention for
identifiers...  argh.
-- 
        -IAN!  (Ian! D. Allen)      University of Waterloo

mark@elsie.UUCP (07/26/84)

<>
One way to avoid collision between your own subroutine names and those that
may be used by the C libraries is to declare all routines that are used only
in a single source file to be static. Thus if I want to write my own malloc,
I write:
	static malloc(size)
	unsigned	size;
	{
	...
	}
This will (should) not interfere with any malloc's used by the library. Of
course if I want to this malloc from other files of a multi-file source, I
can't use static so I'd better change the name.

-- 
Mark J. Miller
NIH/NCI/DCE/LEC
UUCP:	decvax!harpo!seismo!umcp-cs!elsie!mark
Phone:	(301) 496-5688

DBrown@HI-MULTICS.ARPA (08/07/84)

Multics' "binder" (sort of a linker) has the ability to make names
disappear after they are resolved, thereby reducing the problem
associated with having multiple (many!)  layers of libraries.  The
UofArizona linker also has this same ability, to avoid having to have
conventions.
  --dave (unix hack on a bun) brown