include von header dateien

Gast #672145
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.
Gast
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.
Gast
Ü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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.