bobm@ee.rochester.edu (Bob Molyneaux) (02/02/90)
I seem to have experienced a flaw in the C compiler for the Sun stations. I have declared static variables at the top of a number of source files. Some have identical names. Those that do default to the declaration in the source file which is compiled last. example: Consider 2 source files each with the following declaration at the top static int tempvar; One may accertain the address of the variable tempvar declared in file B. When B is compiled last, any assignment of tempvar in file A is stored in the address allocated in file B. (ie. the two variables are but one.) My local sysadmin tells me that the compiler may not handle static variables properly and to try the gnu compiler. Is this true!? If this has been discussed before please forgive me as I am not a regular reader of this group. Some response would be appreciated. Thanks in advance
djones@decwrl.dec.com (Dave Jones) (02/14/90)
From article <4662@brazos.Rice.edu>, by bobm@ee.rochester.edu (Bob Molyneaux): ... > Consider 2 source files each with the following declaration at the top > > static int tempvar; > > One may accertain the address of the variable tempvar declared in file B. > When B is compiled last, any assignment of tempvar in file A is stored in > the address allocated in file B. (ie. the two variables are but one.) I've never seen this happen, and can not make it happen now with little examples. I get two memory locations, just like I should: % nm a.out | grep tempvar 00020cb4 b _tempvar 00020cb8 b _tempvar When I run it, the program does the right thing. What you need to do is to get a small example program which messes up, post it _exactly_, along with the type of machine, software version number, etc... If there is a problem, it is probably in the linker "ld", not in cc, but I suspect you are overlooking a programming mistake.