[net.lang.c] Initializing Vars in non-OS C systems

knudsen@ihnss.UUCP (07/22/83)

I write C code for 8086 systems with the .text and .data (constants
of course) in ROM and the .bss in RAM.
It has been my understanidng that our BTL C compiler (basic16)
will initalize variables if & only if you say so in the declarations.
There are two kinds: globals (declared outside any {}) that are
explicitly assigned to .bss addresses and known by name to
assemblers, loaders, linkers, and debuggers.  The other kind,
declared inside a procedure (inlucding main()), are just stack-frame
and can't be traced.  However, these get initialized (if you assk for it)
on every call.  I don't know whether globals can be init'ed or not;
I always do these with code statements anyway.

Question: does init'ing vars in declarations buy you anything in
space or speed over doing it by actual statements in the body?
	mike k

chris@umcp-cs.UUCP (07/23/83)

Since the thing that started this discussion was Whitesmith C, let me
point out yet again that the problem is not that they don't set statics
to zero.  They *do* set statics to zero -- try

	main () { static x; putfmt ("x=%d\n", x); }

and you get zero (I forget if you use putfmt that way, but you probably
understand what I mean).  The problem is that they don't create a
global variable unless you initialize it!  Try

	int var;
	main () { foo (var); }
	foo (n) int n; { }

Compile, and you get:  "Undefined: var.".  If you use

	int var = <any integer> ;

it compiles correctly.  But if you don't initialize it it's considered
*external*.

				- Chris
-- 
In-Real-Life:	Chris Torek, Univ of MD Comp Sci
UUCP:		{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:		chris@umcp-cs
ARPA:		chris.umcp-cs@UDel-Relay