On Thu, Apr 30, 2009 at 6:54 AM, Eus <reply.to.eus.at.member.fsf....@gmail.com> wrote: > Hi Ho! > > Sorry, if I sort of hijack this thread. > > On Wed, 2009-04-29 at 15:43 +0000, Joseph S. Myers wrote: > >> > > "int i;" is not the same as "extern int i;". >> > >> > Sorry for my ignorance but I have been reading and searching for the >> > answer and I cannot tell what is the difference between "int i = 1" >> > and "extern int i = 1" at file-scope in C. >> >> I did not say those were different, I said the uninitialized case was >> different, so "extern is implicit if missing" is not a general C rule. > > I think the difference between "int i;" and "extern int i;" at > file-scope in C is that "int i;" will only be treated as a definition if > it is not defined in another place in the same file/TU. IOW, its linkage > is internal within the TU itself. But, "extern int i" is definitely > treated as a declaration only that can later be defined either in the > same TU or in another one. > > Is that true?
Yes. C has the notion of tentative definition and C++ does not. I.e. in C, int i; is a tentative definition of 'i'; in C++ it is a definition -- so cannot be repeated.