Forum: Mikrocontroller und Digitale Elektronik include von header dateien


von c nobby (Gast)


Lesenswert?

Hallo,
ich hab folgendes Problem:

ich habe folgende Dateien die ich zusammen linken möchte.
1
//1.main.c
2
//Aufruf:
3
int x;
4
funktion(x,var_y);
5
6
//2.meineFunktionen.c
7
void funktion(int i,int j)
8
{
9
z=i+j+var_y;
10
}
11
12
//3.meineFunktionen.h
13
#ifndef  meineFunktionen_h
14
#define meineFunktionen_h
15
16
#define var_y 100
17
//global var
18
int z;
19
//protos
20
void funktion(int i,int j);
21
#endif

Um die Funktion in der main nutzen zu können muss ich diese mit extern 
neu definieren incl der variablen.
die mit #define angegebenen Konstanten muss ich in der main auch neu 
bekanntmachen.

Gibt es eine möglichkeit dies zu umgehen?
Ich möchte etwas modular programmieren aber auf globale variablen nicht 
verzichten.

von c nobby (Gast)


Lesenswert?

Seufz,
geht aber bei mir irgendwie nicht.
ich habe die .h datei dann in
meineFunktionen.c und in der main.c inkludiert, da ich die Variablen in 
beiden Dateien benötige.
Da meckert der linker über multiple definitionen.

von yalu (Gast)


Lesenswert?

Üblicherweise enthalten Header-Files ausschließlich Deklarationen und
Makrodefinitionen, aber weder Variablen- noch Funktionsdefinitionen.
Diese stehen in den c-Files.
1
int z;
Ist eine Variablendefinition, gehört also in eine c-Datei, am besten
in eine, wo sie logisch gut hineinpasst, bei dir also bspw.
meineFunktionen.c. Damit andere Programmmodule auf z zugreifen können,
steht im Header-File meineFunktionen.h eine extern-Deklaration:
1
extern int z;

meineFunktionen.h wird in meineFunktionen.c und in allen anderen
c-Files, die z oder funktion benutzen, includet.

Dann hast du keine Konflikte und maximale Typsicherheit.

von c nobby (Gast)


Lesenswert?

Danke,
jetzt funzt es ist und ich habs verstanden.

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
Noch kein Account? Hier anmelden.