Avatar billede bolmer Nybegynder
19. april 2005 - 13:34 Der er 3 kommentarer og
1 løsning

Problemer med header filer

Jeg har lavet en header fil (mystructs.h) som indeholder følgende:

#define STACK_SIZE 1024

struct tkb {
  void *(*start_routine) (void *);
  void *arg;
  jmp_buf tilstand;
  int    stak[STACK_SIZE];
};

struct list {
  struct tkb *thread;
  struct list *previous;
  struct list *next;
};

I en fil (test1.c) inkludere jeg denne fil:

#include "mystructs.h"

der medfører at jeg frit kan bruge tkb og list.


I en anden fil (test2.c) inkludere jeg test1.c:
#include "test1.c"

der medfører at jeg kan bruge de funktioner jeg har skrevet i test1.c plus de structures jeg har skrevet i "mystructs.h".

Men er det god kodestil at test2.c kun kan bruge mystructs.h igennem test1.c?

Jeg har prøvet i test2.c både at inkludere test1.c og mystructs.h men det giver en fejl:

gcc -g -Wall -o test2 test2.c
In file included from test2.c:5:
mystructs.h:7: error: redefinition of `struct tkb'
mystructs.h:15: error: redefinition of `struct list'
Avatar billede arne_v Ekspert
19. april 2005 - 13:44 #1
Undlad at inkludere test1.c i test2.c og byg med:

gcc -g -Wall -o test2 test2.c test1.c

eller

gcc -c -g -Wall -o test1.o test1.c
gcc -c -g -Wall -o test2.o test2.c
gcc -g -Wall -o test2 test2.o test1.o
Avatar billede arne_v Ekspert
30. april 2005 - 16:59 #2
OK ?
Avatar billede bolmer Nybegynder
06. maj 2005 - 21:02 #3
Fandt udaf at det er bedst at bruge en Header guard istedet.
Avatar billede arne_v Ekspert
06. maj 2005 - 21:07 #4
det er en glimrende ide at bruge en header guard

men derfor er det stadig en elendig ide at inkludere c filer i andre c filer

header guard er opfundet for at beskytte i tilfælde hvor a.h inkluderer x.h og
b.h inkluderer x.h og alfa.c skal inkludere både a.h og b.h
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