Avatar billede nomak Nybegynder
26. maj 2003 - 14:06 Der er 9 kommentarer og
1 løsning

include filer til funktioner

Hey E!

Mit C projekt er kommet til at fylde temmeligt meget, så nu vil jeg gerne have nogle af mine funktioner includeret i andre filer.. Det jeg gerne vil vide er, hvordan jeg skal bære mig ad?

kender godt det med
#include "min_fil.h"

men hvordan skal jeg så definere mine funktioner i filen?

et eksembel ville være godt :)

Best regards
-NoMak
Avatar billede soreno Praktikant
26. maj 2003 - 14:35 #1
-------------Func.h
#ifndef FUNC_H
#define FUNC_H

int GetVal(int i);

#endif


-------------Func.c
#include "Func.h"

int GetVal(int i)
{
    return i;
}


------------Main.c
#include <stdio.h>
#include "Func.h"

int main(int argc, char **argv)
{
    printf("Resultatet er: %i\n", GetVal(12345));

    return 0;
}
Avatar billede soreno Praktikant
26. maj 2003 - 14:43 #2
Husk at du også skal kompilere Func.c og linke med den resulterende objektfil.
Avatar billede websmith Nybegynder
26. maj 2003 - 14:51 #3
Nu er jeg ikke den største c-haj, men hvorfor har du lavet en Func.c i dit eksempel?? hvorfor ikke bare inkludere "kroppen" til GetVal i Func.h, da det jo alligevel er den eneste fil du inkluderer??

Er compileren og linkeren så smart at den automatisk ved at den skal finde funtionskroppen i Func.c ??

mvh
Avatar billede websmith Nybegynder
26. maj 2003 - 14:53 #4
Eller er det af performance hensyn??, eller ??
Avatar billede soreno Praktikant
26. maj 2003 - 15:07 #5
Kompileringen vil gå hurtigere.

Man kan nøjes med at kompilere Func.c én gang og genbruge objektfilen - det kan man ikke hvis man har den i .h filen.

Det er ikke noget problem i eksemplet. Men hvis der nu var i en større sammenhæng så vil det være belastende at skulle kompilere det hele hver gang.
Avatar billede nomak Nybegynder
26. maj 2003 - 15:08 #6
synes også det lyder helt åndsvagt at man skal lave en .c fil ved siden af den .h fil.. ??
Avatar billede nomak Nybegynder
26. maj 2003 - 15:11 #7
kan man ikke bare skrive :

int GetVal(int i) {
  return i;
}

ind i sin .h fil?
Avatar billede soreno Praktikant
26. maj 2003 - 15:15 #8
Jow, det kan man også.

Men som skrevet, skal du kompilere koden hver gang du kompilere de filer som includer "Func.h".

Det vil tage længere tid at kompilere.
Avatar billede segmose Nybegynder
26. maj 2003 - 15:25 #9
Ikke nok med det men du vil have includeret den i hver eneste object fil, hvorefter compileren skulle brokke sig.

Dog kan man i C++ i så simple tilfælde tillade sig at skrive

inline int GetVal(int i) { return i; }

i sin header fil, men du skal være meget påpasselig med dette da det kan føre til at programmerne vokser enormt hvis inline funktionerne bliver større og du bruger dem mange gange.

Header filerne skal generelt indeholde mindst muligt og .c/.cpp filerne
mest muligt dette skulle give det bedste resultat: mindre kode størrelse og
dermed højre hastighed, her er dog den untagelse at inline oneliners ofte giver
bedre ydelse da de kompileres direkte ind i koden og ikke først skal kaldes
over stacken.
Avatar billede arne_v Ekspert
27. maj 2003 - 04:32 #10
Segmose har helt ret.

Inkluder selve koden mere end et sted og linkeren vil spytte
warnings/fejl ud som et maskin-gevær.

Duer ikke.

Flere .C/.CPP filer.

Og hvis det er bøvlet at holde styr på, så lær at bruge make.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester