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