Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!caen!ox.com!math.fu-berlin.de!unidui!unido!rwthinf!cip-s08!wolfram From: wolfram@cip-s08.informatik.rwth-aachen.de (Wolfram Roesler) Newsgroups: comp.lang.c Subject: Re: Just above and below main() Message-ID: Date: 12 Apr 91 12:16:15 GMT References: <1243@nanometrics.UUCP> Sender: news@rwthinf.UUCP Lines: 53 stealth@nanometrics.portal.UUCP (Steve Sabram) writes: >_________________________ >int outside; >main() >{ >int inside; >... >} >_________________________ >We all agree that "outside" is >a global and thus accessable Exactly. >to all functions in this file >while "inside" is accessable >only to everything in main(). >Our debate is which one of these >two are initialized to zero if >any. None of them is. The major difference is that the vars lie in different places in memory. Outside is placed in the data segment of the program and inside in on the heap of the funtion main. None of both is intialised to anything unless you tell cc to do so: int outside=0; will initialise outside to 0 on prg start, and int inside=0; will initialise inside to 0 whenever main is called (ok main is called only once but this is valid for other functions too of course). To make inside keep its value during multiple calls of the function it is in, use static int inside=0; this will place inside in the data seg just like it was a global, but it will be accessible from the function it is in only. The initialisation will take place only once at the start of the prg. This is a highly recommended way to avoid globals. More, the outside variable is not only accessible from all functions of the file it is in but from all files linked together. The other files simply have to say extern int outside; and they can do all they want to the variable. To hide outside from other modules and to make it accessible to the current file only, use static int outside; For further info RTFM. Hope to have helped you Okami-san