> int bar [ 4 * 256 ] = { 0,1,2, ... }; > > I did not changed nor any compiler option, neither any > declaration. I still cannot see the difference in between those > two, since the declaration is exactly the same. The only difference > being a default initialization.
There is a more subtle diffrence at work here. According to ANSI: ``An external declaration for an object is a definition if it has an initalizer. *An external object declaration that does not have an initalizer, and does not contain the extern specifier, is a tentaive definition.* If a definition for an object appears in a translation unit, all its tentative definitions become a single definition with initalizer 0.'' The highlighted sentence is very subtle, but it is the entire diffrence between an executables `text' and `bss' sections. In Darwin, ``tentative definition'' is called ``common symbol''. _When you add the initalizer, you make the definition non-tentative_. Got it? (If not, you should reread this paragraph.) The moral of the story is, be sure to always read the fine print. (Translation: keep track of subtleties when doing work.) Samuel Lauber -- _______________________________________________ Surf the Web in a faster, safer and easier way: Download Opera 8 at http://www.opera.com Powered by Outblaze