Article View: be.comp.programming
Article #8975Re: een C probleem
From: Nicolas Barbier
Date: Sat, 01 Jun 2002 20:41
Date: Sat, 01 Jun 2002 20:41
42 lines
2956 bytes
2956 bytes
On Sat, 01 Jun 2002 21:20:34 +0200, Ward Poelmans wrote: > Ik heb een probleem met C: > Ik heb 2 bestanden: test1.h en test1.c test2.c in die test1.h heb ik de > het volgende staan: extern int a; > Ik gebruik die integer a in een functie in test1.c Hij krijgt gewoon een > waarde. > En ik test2.c staat er een main functie die die functie uit test1.c > gebruikt. Maar als ik dit compileer krijg ik bij het linken de volgende > melding: > test1.o: Undefined reference to `a' > > Maar als ik het keyword extern wegdoe linkt het wel. Wil mij iemand > zeggen wat hier verkeerd aan is? je moet die variabele ergens definieren (d.i. plaats reserveren). met "extern int bla" reserveer je nooit plaats, je declareert het bestaan van die var in een andere compilatie-eenheid. met "int bla" reserveer je volgens de C standaard afaik ook geen plaats (zie verder), maar doe je perfect hetzelfde als met extern. met "int bla = 0" reserveer je plaats. het prob komt afaik omdat gcc het toelaat om (in 1 of meerdere compilatie-eenheden) een variabele te declareren zonder "extern" zonder ooit te definieren (dus zonder ooit te initialiseren). (hij maakt die plaats dan maar gewoon aan). maw gcc interpreteert "extern" als "iets" terwijl afaik de C standaard er geen betekenis aan geeft behalve dat je het niet mag gebruiken om een var te definieren (maar dat wordt normaal al aangegeven door het al dan niet aanwezig zijn van een initializer). dus maw gcc laat iets toe dat niet moet worden toegelaten (nuja, gcc laat wel meer dingen toe die niet in de C standaard staan :-) om dit antwoord te schrijven heb ik wel de C standaard niet gebruikt dus als je het zeker wilt weten zoek het eens op :-) (bv in kernighan en ritchie ofzo). (voor zover ik me herinner zegt k&r dat "extern" nooit hoeft te worden gebruikt) btw ik denk dat het beter is om geen globale variabelen in C te gebruiken. -- Nicolas Barbier /* http://users.pandora.be/HATE/profiles/itsme/ */
Technical Details
Message-ID:
<pan.2002.06.01.22.41.25.635806.1442@in.group>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!cox.net!easynet-quince!easynet.net!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!not-for-mailReferences:
<pan.2002.06.01.21.20.21.731903.5346@pandora.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,a220b22816262454 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-06-01 13:41:49 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!cox.net!easynet-quince!easynet.net!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!not-for-mail From: Nicolas Barbier <reply@in.group> Subject: Re: een C probleem Date: Sat, 01 Jun 2002 22:41:25 +0200 Newsgroups: be.comp.programming Message-ID: <pan.2002.06.01.22.41.25.635806.1442@in.group> References: <pan.2002.06.01.21.20.21.731903.5346@pandora.be> User-Agent: Pan/0.11.2 (Unix) Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Comment-To: "Ward Poelmans" <Ward.Poelmans@pandora.be> Lines: 42 Organization: [ posted via Easynet Belgium ] NNTP-Posting-Host: 213.193.182.77 X-Trace: 1022964108 3764 213.193.182.77 X-Complaints-To: abuse@be.easynet.net