This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: (extern int vs. int) and (extern function vs. function) (was: gcc-in-cxx update)


On Thu, Apr 30, 2009 at 6:54 AM, Eus
<reply.to.eus.at.member.fsf.org@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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]