mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik include von header dateien


Autor: c nobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab folgendes Problem:

ich habe folgende Dateien die ich zusammen linken möchte.
//1.main.c
//Aufruf:
int x;
funktion(x,var_y);

//2.meineFunktionen.c
void funktion(int i,int j)
{
z=i+j+var_y;
}

//3.meineFunktionen.h
#ifndef  meineFunktionen_h
#define meineFunktionen_h

#define var_y 100
//global var
int z;
//protos
void funktion(int i,int j);
#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.

Autor: c nobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Üblicherweise enthalten Header-Files ausschließlich Deklarationen und
Makrodefinitionen, aber weder Variablen- noch Funktionsdefinitionen.
Diese stehen in den c-Files.
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:
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.

Autor: c nobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,
jetzt funzt es ist und ich habs verstanden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.