Gå til innhold

Hvorfor bruke "extern" i .h-filen min? C-spm.


Anbefalte innlegg

jeg har en fil "filnavn.h" som ser slik ut:

 

 

#ifndef FILNAVN_H

#define FILNAVN_H

 

extern void funksjon1(int variabel);

 

void funksjon2(int variabel, int variabel2);

 

#endif

 

 

(Jeg har en annen fil, "filnavn.c" der jeg har innholdet til funksjonene(hva de gjør)).

 

 

Spm mitt er da hva forskjellen er på å skrive extern eller ikke foran funksjonene i .h-filen.. Såvidt jeg har erfart kan jeg bruke både funksjon1 og funksjon2 i alle de andre .c-filene mine sålenge jeg har en include filnavn.h på toppen. Hvorfor det?

 

Ikke veldig praktisk spm kanskje men jeg prøver å forstå ting og tang:)

Endret av Elenion
Lenke til kommentar
Videoannonse
Annonse

extern betyr i den sammenhengen der at symbolet defineres av en annen "translation unit", det vil si en annen .c/cpp-fil. Kompilatoren din godtar dermed at en definisjon ikke foreligger når funksjonen forsøkes kalles, og overlater resten til linkeren.

 

Nå skal det nevnes at det (i hvertfall i C++) at extern er standardlagringsmetoden for alle symboler deklarert (i namespace / global scope).

Lenke til kommentar
Jeg kan ikke C++ :)

 

Men ok tror jeg nesten forsto hva du mente. Makefilen min kompilerer jo alle .o-filene sammen i 1 fil, så det er kanskje derfor det fungerer uten extern?

7988607[/snapback]

 

Hver objekt-fil (.o) representerer én "translation unit". Dersom det fungerer å ha en ikke-ekstern funksjonsdeklarasjon i én .c-fil, og implementasjonen i en annen, uten noen headerfiler deles mellom de to, så er extern standard i C også.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...