header kompiler
-
hey leute,
ich hab folgendes problem und zwar angenommen wir sind in folgendem szenario:ich hab folgende datein
main.c
main.h
header.hAngenommen in der header.h ist ein beliebiger Strukt
"struct str{...};"
deklariert oder irgendwie sowas in der art und ich hab in der main.h sowas wie
"extern str str_variable" stehen, also einen verweis auf eine extern deklarierte variable von diesem strukt-typen der in der header.h steht.muss ich die header.h dann zwingend in der main.h includieren? ich wollte das eigentlich in der main.c bei den anderen "includes" machen und dachte das klappt auch, was aber leider nicht der fall ist.
normal wird ja der quellcode aus der main.h ja in die main.c "kopiert".
wenn ich jetzt in einer der ersten zeile, die header.h einbinde, dann sollten die extern-variable doch vernünftig deklariert werden können oder nicht?oder kompiliert der kompiler auch die reine main.h auch eigenständig für sich und verursacht dadurch den fehler, weil der den strukt "str" nicht kennt?
der spuckt mir immer sowas wie:
syscalls.h:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘sigset’
syscalls.h:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘old_set’aus.
wäre echt nett wenn ihr mit da weiterhelfen könntet
gruß und schönes wochenende an alle
-
MatheStein schrieb:
muss ich die header.h dann zwingend in der main.h includieren?
Nein.
MatheStein schrieb:
normal wird ja der quellcode aus der main.h ja in die main.c "kopiert".
Wenn in der main.c "#include main.h" steht dann ja. Und dieses kopieren ist ein echtes richtiges kopieren, kein "kopieren".
MatheStein schrieb:
wenn ich jetzt in einer der ersten zeile, die header.h einbinde, dann sollten die extern-variable doch vernünftig deklariert werden können oder nicht?
Ja, solange das "#include header.h" vorm "#include main.h" kommt funktioniert das. Da die main.h direkt von der header.h abhängt solltest du dir überlegen ein "#include header.h" in die main.h reinzuschreiben.
MatheStein schrieb:
oder kompiliert der kompiler auch die reine main.h auch eigenständig für sich und verursacht dadurch den fehler, weil der den strukt "str" nicht kennt?
Der Compiler kompiliert das was du ihm sagst dass er kompilieren soll. Wenn du "meincompiler main.c" sagst, kompiliert er main.c, wenn du "meincompiler main.h" sagst, kompiliert er main.h. Aber sowas macht man eigentlich nicht, üblicherweise werden Header nur in c-Dateien eingebunden und die c-Dateien kompiliert.
Allerdings ist dein Beispiel komisch. "extern str str_variable". Da sollte er sagen dass er str nicht kennt. Es sollte "extern struct str str_variable" heißen. Außer natürlich du benutzt ein "typedef str struct str".MatheStein schrieb:
der spuckt mir immer sowas wie:
syscalls.h:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘sigset’
syscalls.h:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘old_set’aus.
Tja keine Ahnung, da musst du wohl mal in die syscalls.h Zeile 6 und 7 hineinkucken müssen um herauszufinden was dort schief gelaufen ist. Wenn es ein "Standardheader" ist kannst du die Fehlermeldung in google reinkopieren und kucken was das Internetz dazu meint.
-
vielen dank für die antwort.
du hattest recht, dem gcc wurder der header mit zum kompilieren gegeben in der makefile und von daher wart ihm offensichtlich der struct-typ in dem header unbekannt beim kompilieren
gruß