Article View: be.comp.programming
Article #16394Re: Nog meer (eenvoudige) programmeervragen
From: Koen Deforche
Date: Tue, 16 May 2000 00:00
Date: Tue, 16 May 2000 00:00
50 lines
3084 bytes
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-mailReferences:
<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