[net.lang.c] Modules and variable scope

geacc022%timevx@CIT-HAMLET.ARPA (05/29/85)

    I'm a little confused about how adding 'modules' to C would stop
programs from accessing global data they really weren't supposed to
access.  You can't stop global data from being accessed, only hide
it hoping the accessor doesn't know where it is.

    If we're talking about pascal's "import" and "export" (or
"interface" and "implementation"), then C already has it:

extern int his_global;		/* to import a global variable	*/
       int my_global;		/* to export a global variable	*/
static int my_local;		/* to declare a local var.	*/

    In fact, this is more versatile since you only declare the
variables you use.  But nothing can stop a C program from declaring
and using any global data it wants to.

    The example commonly given is programs that know about the
structure of _iob.  The reason that _iob must be global is so that
MACROS like getchar(), putchar(), fileno(), etc. can access it.  If
we replace the macros with the appropriate function calls, there is
no need to declare _iob in stdio.h and, if all the functions that use
it are in one file, it could be static within that file.  If it is
external, then any program that wants to know about the structure of
_iob can do so.  (I agree that it's a bad idea, for several reasons).

			Gary Ansok
			GEACC022%TIMEVX @ CIT-HAMLET.ARPA
			GEA @ CALTECH.BITNET
			...ucbvax!cithep!timevx#geacc022

"All the world loves a straight man."