🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #8975

Re: een C probleem

#8975
From: Nicolas Barbier
Date: Sat, 01 Jun 2002 20:41
42 lines
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-mail
References: <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