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 Waterloomark@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