🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #16394

Re: Nog meer (eenvoudige) programmeervragen

#16394
From: Koen Deforche
Date: Tue, 16 May 2000 00:00
50 lines
3084 bytes
Vincent Touquet wrote:
> 
> Wat is trouwens het verschil tussen een library

Een library bevat implementatie, of nog specifieker, zogenaamde
'symbols'. Dit zijn functie-implementaties en variabelen.
Eigenlijk is een library slechts een hoop object files bijeen.
Met andere woorden, ook een object file bevat symbols.

> en een header file (~ een include directive)

Een headefile (of toch tenminste het aangewezen gebruik voor
headerfiles) declareert functies en variabelen (of in het geval
van C++) klassen die in een library of set van object files,
of 1 object file, worden geimplementeerd.

Strikt genomen worden headerfiles (via een #include directive)
door een programma dat bij uw compiler zit, de pre-processor,
gewoon bijeen gekwakt samen met uw sourcecode, en dat resultaat
wordt vervolgens echt gecompileerd.

Met andere woorden, de compiler weet niet wat uit een headerfile
komt of wat je zelf hebt bijeengeschreven. En dus zijn er
vele andere (mis)bruiken voor headerfiles denkbaar.

Tenslotte heb je de linker die verschillende objectfiles
bijeen gaat plakken, en er 'symbols' gaat resolven. Dit zijn
aanroepen van functies die in een andere object file zit
in orde maken. Daarom gaat je linker af en toe errors geven
als 'unresolved symbols', dit zijn symbolen waarnaar je wel
hebt gerefereerd maar waarvoor je geen implementatie hebt
voorzien (of dus, je hebt ze wel gedeclareerd in een headerfile
en ergesn gebruikt, maar je hebt ze niet geimplementeerd
in een .c of .cc file). Of ook soms 'duplicate symbols', dit
zijn symbolen die je tweemaal hebt geimplementeerd in 2
verschillende object files.

Nu, de echte reden waarom je niks implementeert in een
headerfile en daar dus enkel declaraties doet, is om net
die duplicate symbols te vermijden: zou je een headerfile
includen in 2 verschillende files (en daarvoor is ie
tenslotte gemaakt), en die headerfile implementeert een
symbool, dan heb je duplicate symbols.

Zodus, denk er gewoon aan dat er 3 belangrijke programma's
zijn : C preprocessor, compiler+assembler en linker waarbij
de C preprocessor headerfiles aanpakt en de linker objectfiles
en libraries.

koen.
Technical Details
Message-ID: <39217981.84FCF4E5@easics.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <39205024.4E0A278F@student.kuleuven.ac.be> <39217797.1E09FDB2@student.kuleuven.ac.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,c9039ea65ae6467a
X-Google-Attributes: gidfcea4,public
X-Google-Thread: 100a19,c9039ea65ae6467a
X-Google-Attributes: gid100a19,public
From: Koen Deforche <koen@easics.be>
Subject: Re: Nog meer (eenvoudige) programmeervragen
Date: 2000/05/16
Message-ID: <39217981.84FCF4E5@easics.be>
X-Deja-AN: 624133916
Content-Transfer-Encoding: 7bit
References: <39205024.4E0A278F@student.kuleuven.ac.be> <39217797.1E09FDB2@student.kuleuven.ac.be>
X-Accept-Language: en
Content-Type: text/plain; charset=us-ascii
X-Complaints-To: newsmaster@kpnqwest.net
X-Trace: nreader2.kpnqwest.net 958495106 193.74.198.7 (Tue, 16 May 2000 18:38:26 MET DST)
Organization: Easics nv, Leuven, Belgium, http://www.easics.com
MIME-Version: 1.0
NNTP-Posting-Date: Tue, 16 May 2000 18:38:26 MET DST
Newsgroups: be.comp.programming,be.comp.os.linux