/ 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
Headerfiler!!
Fra : Preben Holm


Dato : 04-03-04 20:00

Hej

Er der nogen der kan fortælle hvad en header-fil egentlig definerer helt
konkret!!!

Dvs. tag f.eks. eksempler fra stdio.h fra f.eks. Turbo C++ 1.01 (kan
hentes fra museum.borland.com)


Mvh / Preben

 
 
Lasse Westh-Nielsen (04-03-2004)
Kommentar
Fra : Lasse Westh-Nielsen


Dato : 04-03-04 23:56

"Preben Holm" <64bitNOSPAM@mailme.dk> wrote:

> Er der nogen der kan fortælle hvad en header-fil egentlig definerer helt
> konkret!!!

Kig i Kernighan&Ritchie: "The C Programming Language", kapitel 4, side 82.

Headerfiler indeholder definitioner og deklarationer, som bruges i flere
forskellige source filer.

Hvis du fx har lavet en implementation af en stak-datastruktur:

/* stak.c */
#include "stak.h"
int count = 0;
int stak[STAKMAX];
void push(int i)
{
stak[count++] = i;
}
int pop()
{
return stak[count--];
}
int size()
{
return count;
}

- og du har lyst til at skrive et program der bruger din stak, så er det
smart at lave en headerfil der indeholder de vigtigste funktionskald og
definitioner du kan bruge på stakken, fx:

/* stak.h */
#define STAKMAX 1000
void push(int i);
int pop();
int size();

Dit stakbruger program kan så inkludere stak.h og bruge disse
funktionsprototyper under kompileringen:

/* stakuser.c */
#include "stak.h"
int main()
{
if (size() < STAKMAX) push(5);
int a;
if (size() > 0) a = pop();
}

Læg mærke til at der ingen forbindelse er mellem stakuser.c og stak.c!!

Der er ingen forskel på, om du skrev funktionsprototyperne i toppen at dit
stakbrugerprogram, eller om du inkluderer headeren; #include er kun en
tekstuel ting der putter indholdet af det du inkluderer ind på den plads
hvor #include'en står.
Men, hvis du bruger en header kan du nøjes med at ændre eet sted hvis du vil
ændre prototyperne - hvis fx du har flere stakbrugerprogrammer.
En anden ting er, når du benytter flere source filer, så skal du på en eller
anden måde binde dem sammen. Funktionsprototyperne er en måde at sige: "når
vi linker vil de her funktioner være til stede. så nu kan du compile dine
små filer (compilationunits), og så lover vi at når du linker det hele så
går alt godt". Så du kan compilere stak.c og stakuser.c separat, og derefter
linke dem til eet program. Hvis du sidder og fumler meget med den ene, så
kan du så kompilere den for sig, og derved spare tid i forhold til hvis du
skulle kompilere hele dit "store" stak-projekt

Jeg håber det var dækkende.

Mvh Lasse


--
Lasse Westh-Nielsen
lasse@daimi.au.dk




Preben Holm (05-03-2004)
Kommentar
Fra : Preben Holm


Dato : 05-03-04 22:10

Hej Lasse

Tak, det hjalp!!!


Mvh / Preben

Lasse Westh-Nielsen wrote:
> "Preben Holm" <64bitNOSPAM@mailme.dk> wrote:
>
>
>>Er der nogen der kan fortælle hvad en header-fil egentlig definerer helt
>>konkret!!!
>
>
> Kig i Kernighan&Ritchie: "The C Programming Language", kapitel 4, side 82.
>
> Headerfiler indeholder definitioner og deklarationer, som bruges i flere
> forskellige source filer.
>
> Hvis du fx har lavet en implementation af en stak-datastruktur:
>
> /* stak.c */
> #include "stak.h"
> int count = 0;
> int stak[STAKMAX];
> void push(int i)
> {
> stak[count++] = i;
> }
> int pop()
> {
> return stak[count--];
> }
> int size()
> {
> return count;
> }
>
> - og du har lyst til at skrive et program der bruger din stak, så er det
> smart at lave en headerfil der indeholder de vigtigste funktionskald og
> definitioner du kan bruge på stakken, fx:
>
> /* stak.h */
> #define STAKMAX 1000
> void push(int i);
> int pop();
> int size();
>
> Dit stakbruger program kan så inkludere stak.h og bruge disse
> funktionsprototyper under kompileringen:
>
> /* stakuser.c */
> #include "stak.h"
> int main()
> {
> if (size() < STAKMAX) push(5);
> int a;
> if (size() > 0) a = pop();
> }
>
> Læg mærke til at der ingen forbindelse er mellem stakuser.c og stak.c!!
>
> Der er ingen forskel på, om du skrev funktionsprototyperne i toppen at dit
> stakbrugerprogram, eller om du inkluderer headeren; #include er kun en
> tekstuel ting der putter indholdet af det du inkluderer ind på den plads
> hvor #include'en står.
> Men, hvis du bruger en header kan du nøjes med at ændre eet sted hvis du vil
> ændre prototyperne - hvis fx du har flere stakbrugerprogrammer.
> En anden ting er, når du benytter flere source filer, så skal du på en eller
> anden måde binde dem sammen. Funktionsprototyperne er en måde at sige: "når
> vi linker vil de her funktioner være til stede. så nu kan du compile dine
> små filer (compilationunits), og så lover vi at når du linker det hele så
> går alt godt". Så du kan compilere stak.c og stakuser.c separat, og derefter
> linke dem til eet program. Hvis du sidder og fumler meget med den ene, så
> kan du så kompilere den for sig, og derved spare tid i forhold til hvis du
> skulle kompilere hele dit "store" stak-projekt
>
> Jeg håber det var dækkende.
>
> Mvh Lasse
>
>
> --
> Lasse Westh-Nielsen
> lasse@daimi.au.dk
>
>
>

Byrial Jensen (06-03-2004)
Kommentar
Fra : Byrial Jensen


Dato : 06-03-04 10:36

Lasse Westh-Nielsen wrote:
> - og du har lyst til at skrive et program der bruger din stak, så er det
> smart at lave en headerfil der indeholder de vigtigste funktionskald og
> definitioner du kan bruge på stakken, fx:
>
> /* stak.h */
> #define STAKMAX 1000
> void push(int i);
> int pop();
> int size();

Hvis der bruges C (i modsætning til C++), bør de 2 sidste erklæringer være:

int pop(void);
int size(void);


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

Månedens bedste
Årets bedste
Sidste års bedste