Hallo! Ich steh grad etwas auf dem Schlauch. Ich habe ein Projekt im AVR Studio angelegt. Unter Source-File habe ich zwei c-Files mit unterschiedlichen Funktionen (nur eine hat die main-funktion). Wie greife ich nun aber von einer Funktion aus dem einem c-File auf eine Funktion des andere c-Files zu? Danke für eure Hilfe. Gruß Furo
Mache ein header-file für das eine c-file und "include" es dann im anderen. In diesem header-file schreibst Du dann den Prototypen zu Deiner Funktion, die Du im anderen File verwenden willst.
so:
1 | funktionsname(parameter) |
;-) Du musst allerdings noch eine Headerdatei anlegen: zweiteDatei.h und dort von der Funktion den Prototypen reinschreiben: z.B. int funktionsname(int paramter1);
Konkret: Im ersten c-File: test.c
1 | void Funktion1 (void) |
2 | {
|
3 | //Code
|
4 | }
|
Dann dazu test.h:
1 | extern void Funktion1 (void); |
Dann kannst Du im main.c:
1 | #include "test.h" |
2 | |
3 | int main (void) |
4 | {
|
5 | Funktion1(); |
6 | |
7 | while(1){..} |
8 | return 0; |
9 | }
|
Wie gesagt schreibt man ein Header-File, zB foo.h
1 | #ifndef _FOO_H_
|
2 | #define _FOO_H_ /* vermeidet Probleme bei Mehrfach-Includes */ |
3 | |
4 | #define WERT_1 0x1
|
5 | |
6 | typedef struct |
7 | {
|
8 | ...
|
9 | } data_t; |
10 | |
11 | extern void foo (void); |
12 | |
13 | extern int zahl; |
14 | |
15 | #endif /* _FOO_H_ */ |
und in foo.c
1 | #include "foo.h" |
2 | |
3 | int zahl = 12; |
4 | |
5 | void foo (void) |
6 | {
|
7 | zahl = WERT_1; |
8 | }
|
und in bar.c
1 | #include "foo.h" |
2 | |
3 | int main() |
4 | {
|
5 | foo(); |
6 | |
7 | if (zahl != WERT_1) |
8 | ...
|
9 | }
|
Die einzelnen Module können separat compiliert wergen mit gcc und später gelinkt
1 | xxx-gcc <optionen> -c foo.c -o foo.o |
2 | xxx-gcc <optionen> -c bar.c -o bar.o |
3 | xxx-gcc <optionen> foo.o bar.o -o foobar.elf |
Alternativ kann auch alles zusammen übersetzt werden
1 | xxx-gcc <optionen> foo.c bar.c -o foobar.elf |
Oh, irgendwie ist das bei mir wohl zu arg verschachtelt. Da die Funktion der c-Klasse die aufgerufen werden will wieder von Methoden abhängt, die in Header-Files definiert sind, die wiederum in der "Main-Klasse" eingebunden werden. Binde ich nun die Header-Files in dem zweiten c-File ein, kommen auch viele Meldungen der doppelten Defintion...
> Da die Funktion der c-Klasse die aufgerufen werden will wieder von > Methoden abhängt, die in Header-Files definiert sind, die wiederum in > der "Main-Klasse" eingebunden werden. Du programmierst in C. Das kennt keine Klassen und keine Methoden. > Binde ich nun die Header-Files in dem zweiten c-File ein, kommen > auch viele Meldungen der doppelten Defintion... In Headerdateien gehören Deklarationen, keine Definitionen. Also keine Funktionen, sondern nur deren Prototypen.
Aha .... sonderlich schlauer bin ich jetzt jedoch nicht.
> Binde ich nun die Header-Files in dem zweiten c-File ein, kommen > auch viele Meldungen der doppelten Defintion... (...) > Aha .... sonderlich schlauer bin ich jetzt jedoch nicht. Dann sieh Dir doch mal so eine Fehlermeldung genauer an und sieh Dir an, was Du wo deklariert hast und was Du wo eingebunden hast. Verwendest Du globale Variablen? Hast Du die in der Headerdatei korrekt als extern deklariert? Wie sehen Deine Funktionsprototypen aus? Bindest Du etwa auch *.c-Dateien per #include ein?
> Aha .... sonderlich schlauer bin ich jetzt jedoch nicht.
Poste doch einfach mal deinen kompletten Code.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.