/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
spm. om #include
Fra : Achton N.


Dato : 11-03-02 19:36

Hej,

hvordan håndterer præprocessoren flere
ens #include-erklæringer i både header-
og kildefil?

Er der i det hele taget nogen forskel
på, om man inkluderer filer i headeren
eller i kildefilen? I givet fald hvilken?
Hvad er at foretrække? Hvordan fa'en
fungerer det egentlig? Hvad er meningen
med Livet, Universet og Alt Det Der?
Er der Intl. Towel Day i Maj? Find selv
på flere spm.

/anton

PS. De første spm. er vigtigst, selvom
de sidste ikke er uvigtige. Ciao.

 
 
Byrial Jensen (11-03-2002)
Kommentar
Fra : Byrial Jensen


Dato : 11-03-02 20:21

Achton N. <achton@heaven.dk> skrev:
> Hej,
>
> hvordan håndterer præprocessoren flere
> ens #include-erklæringer i både header-
> og kildefil?

Hvis den samme fil nævnes i flere forskellige #include-
erklæringer, bliver den inkluderet flere gange. Det vil potentielt
kunne give problemer med ting som bliver erklæret mere en end en
gang. Det beskytter man sig som regel imod med konstruktioner a al:

#ifndef ENTYDIGT_NAVN_PAA_HEADER_FIL
#define ENTYDIGT_NAVN_PAA_HEADER_FIL

// Det egentlige indhold af headerfilen kommer her

#endif

Første gang man inkluderer filen, er ENTYDIGT_NAVN_PAA_HEADER_FIL
ikke defineret, og det egentlige indhold af filen bliver brugt. De
efterfølgende gange er ENTYDIGT_NAVN_PAA_HEADER_FIL defineret og
det egentlige indhold bliver sprunget over.

> Er der i det hele taget nogen forskel
> på, om man inkluderer filer i headeren
> eller i kildefilen? I givet fald hvilken?

Nej.

> Hvad er at foretrække? Hvordan fa'en

Som regel inkluderer man direkte i en fil alle de ting som filen
bruger, uanset om der er tale om en headerfil eller ej.

Men andre metoder er også brugbare.

Kent Friis (11-03-2002)
Kommentar
Fra : Kent Friis


Dato : 11-03-02 20:25

Den Mon, 11 Mar 2002 18:36:21 +0000 (UTC) skrev Achton N.:
>Hej,
>
>hvordan håndterer præprocessoren flere
>ens #include-erklæringer i både header-
>og kildefil?

De bliver inkluderet to gange, medmindre der er gjort noget for at
forhindre det. Alle standard-libraries indeholder noget i retning af:

#ifndef stdio_h
#define stdio_h

.... Her er koden

#endif

så bliver den kun inkluderet en gang.

>Er der i det hele taget nogen forskel
>på, om man inkluderer filer i headeren
>eller i kildefilen? I givet fald hvilken?
>Hvad er at foretrække?

Undgå at inkludere filer i headeren, medmindre de er nødvendige for de
ting der defineres i headeren. Så skal programmet kun inkludere de ting
der er nødvendige, og bliver ikke generet af at der er erklæret en
masse funktioner der ikke bliver brugt (Det kunne jo være man selv havde
brugt nogen af de samme funktionsnavne).

>Hvordan fa'en fungerer det egentlig?

#include svarer til en simpel copy'n'paste på compileringstidspunktet.
Den includede fil bliver simpelthen puttet ind i den fil du er ved at
compilere.

>Hvad er meningen med Livet, Universet og Alt Det Der?

42

Mvh
Kent
--
http://www.celebrityshine.com/~kfr/ - Ny tegning uploadet.

Bertel Lund Hansen (11-03-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 11-03-02 20:48

Achton N. skrev:

>hvordan håndterer præprocessoren flere
>ens #include-erklæringer i både header-
>og kildefil?

Det gør den ikke. Det gør derimod modulerne. De indledes med
noget a la:

   #ifndef _MitModul_
   #define _MitModul_

   <Her er hele modulkoden>

   #endif

Masn kan altså inkludere det en million gange uden at det gør
noget. Hvis ikke det var tilfældet, eller hvis du selv laver et
modul uden denne sikring og inkluderer det to gang, får du en
compilerfejl med "etellerandet already defined".

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Martin Dyring (11-03-2002)
Kommentar
Fra : Martin Dyring


Dato : 11-03-02 22:08

"Achton N." <achton@heaven.dk> wrote in message
news:Xns91CEC79A09653achtonheavendk@212.242.40.196...
> Hej,
>
> hvordan håndterer præprocessoren flere
> ens #include-erklæringer i både header-
> og kildefil?

Ud over de svar du har fået skal det måske understreges at header-guards
(#ifndef, #define, #endif konstruktioner) kun er gældende inde for en
"compilation unit" (dvs. .c/cpp fil).

--
Mvh,
Martin Dyring



Martin Moller Peders~ (11-03-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 11-03-02 23:42

In <R%8j8.4031$8A5.144106@news000.worldonline.dk> "Martin Dyring" <mda@image.dk> writes:

>"Achton N." <achton@heaven.dk> wrote in message
>news:Xns91CEC79A09653achtonheavendk@212.242.40.196...
>> Hej,
>>
>> hvordan håndterer præprocessoren flere
>> ens #include-erklæringer i både header-
>> og kildefil?

>Ud over de svar du har fået skal det måske understreges at header-guards
>(#ifndef, #define, #endif konstruktioner) kun er gældende inde for en
>"compilation unit" (dvs. .c/cpp fil).

Oeh, hvad mener du ?

/Martin




Martin Dyring (11-03-2002)
Kommentar
Fra : Martin Dyring


Dato : 11-03-02 23:54

"Martin Moller Pedersen" <tusk@daimi.au.dk> wrote in message
news:a6jbrd$14j4$1@news.net.uni-c.dk...
> In <R%8j8.4031$8A5.144106@news000.worldonline.dk> "Martin Dyring"
<mda@image.dk> writes:
>
> >Ud over de svar du har fået skal det måske understreges at header-guards
> >(#ifndef, #define, #endif konstruktioner) kun er gældende inde for en
> >"compilation unit" (dvs. .c/cpp fil).
>
> Oeh, hvad mener du ?

Mmm - var vidst ikke så klart formuleret. Header-guardsne bruger man
naturligvis i header-filer (og ikke .c/cpp - der vidst normalt betegnes
"compilation units"). Headers guards (#defines, faktisk), gælder ikke "på
tværs" af compilation units - dvs. hvis hest.cpp og gris.cpp bliver
kompileret - og begge inkluderer dyr.h - så vil der bliver kigget på dyr.h's
indhold i to omgange.

--
Mvh,
Martin Dyring



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste