| delorie.com/archives/browse.cgi | search |
| From: | Alex Vinokur <alexvn AT bigfoot DOT com> |
| Newsgroups: | alt.comp.lang.learn.c-c++,comp.os.msdos.djgpp |
| Subject: | Re: use of extern -- please help |
| Followup-To: | alt.comp.lang.learn.c-c++ |
| Date: | Sun, 09 Sep 2001 08:44:06 +0200 |
| Organization: | Scopus Network Technologies |
| Lines: | 113 |
| Message-ID: | <3B9B0FB6.CFDCBDBF@bigfoot.com> |
| References: | <3B957A12 DOT A177E7ED AT chipcity DOT com DOT au> <3B977B69 DOT B8DCB9B9 AT bigfoot DOT com> |
| NNTP-Posting-Host: | gateway.scopus.co.il (194.90.203.161) |
| Mime-Version: | 1.0 |
| X-Trace: | fu-berlin.de 1000014257 7562008 194.90.203.161 (16 [79865]) |
| X-Mailer: | Mozilla 4.7 [en] (Win98; I) |
| X-Accept-Language: | en |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
Alex Vinokur wrote:
> Luke Vanderfluit wrote:
>
> > Hi,
> >
> > I've been trying to work out how to use "extern"
> >
> > As far as I've been able to gather, I can compile 2 files seperately and
> > get one to access the others variables/functions.
> >
>
> [snip]
>
> It is necessary to careful with extern declarations in C.
> Here is an example.
>
>
[snip]
It is necessary to careful with extern declarations in C++ as well.
Here is a new example.
===============================
======== Part#1. Files ========
===============================
Note. There is an error in program below :
- main.c contains extern declaration of function foo()
that takes no parameters;
- soo2.c : 1) contains no function definition,
2) contains variable foo__Fv.
------ File main.c ------
extern int foo(void);
int main() {return foo();}
-------------------------
------ File soo2.c ------
int foo__Fv;
-------------------------
===========================================
gcc version 2.95.3 20010315/djgpp (release)
Windows98
gpp : compiles and links C++ sources
===========================================
===============================
===== Part#2. C++-program =====
=== Compilation and Linkage ===
===============================
%gpp main.c soo2.c
<NOTE>C++ compiler/linker doesn't detect our error</NOTE>
===============================
===== Part#3. C++-program =====
========== Analysis ===========
===============================
%gpp -c main.c soo2.c
%nm main.o soo2.o
main.o:
00000020 b .bss
00000020 d .data
00000020 ? .eh_frame
00000000 t .text
00000020 ? ___FRAME_BEGIN__
00000000 t ___gnu_compiled_cplusplus
U _foo__Fv
00000000 T _main
00000000 t gcc2_compiled.
soo2.o:
00000000 b .bss
00000000 d .data
00000004 ? .eh_frame
00000000 t .text
00000004 ? ___FRAME_BEGIN__
00000000 t ___gnu_compiled_cplusplus
00000000 B _foo__Fv
00000000 t gcc2_compiled.
<COMMENT>
We can see that both main.o and soo1.o contain
the same symbol _foo__Fv.
So, a linker has no problem with these object files.
</COMMENT>
-------------
So, C++ compiler doesn't detect our error.
Is it a bug in the C++ compiler? It seems it isn't.
Does that problem have s solution ?
===========================
Alex Vinokur
mailto:alexvn AT bigfoot DOT com
mailto:alexvnw AT yahoo DOT com
http://up.to/alexvn
http://go.to/alexv_math
===========================
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |