Variable von anderer C Datei Verfügbar machen

Gast #3531078
Lesenswert?

Hallo,

Ich schreibe ein C-Programm (nicht c++) und hab eine Variable  int TEST 
= 0;

die befülle ich in meiner main() in der datei main.c mit dem wert 4711

TEST = 4711;

jetzt hab ich in einer anderen C-Datei test.c eine Funktion Add() und 
will dort auf die Variable zugreifen.
Wie kann ich das machen?

der Compile schmeist mir einen Fehler raus (multiply defined) wenn ich 
in der header datei von der main.c die variable rein schreibe.

Grußß
Klaus
Gast #3531098
Lesenswert?

ahh habs

in der main.h

volatile extern int myint; //global


und in der main c dann

volatile int myint = 0;  //initialisieren


und  inder xyz.c dann benutzen

volatile int myint;

funktion(){

myint +1;

}
#3531114
Lesenswert?

AnfängerLPC schrieb:

> und  inder xyz.c dann benutzen
>
> volatile int myint;
>
> funktion(){
>
> myint +1;
>
> }

Nein.
In der xyz.c dann benutzen
1
#include "main.h"
2

3
void funktion() {
4
  myint + 1;
5
}

Dazu hast du das h-File, damit sicher gestellt ist, dass alle extern 
Deklarationen quer durch das komplette Programm über alle Files 
identisch sind.
(und in main.c wird es ebenfalls inkludiert)
1
#include "main.h"
2

3
volatile int myint = 0; //initialisieren
4
...
Gast #3531140
Lesenswert?

Da das mit der globalen Variable ja nun geklärt scheint, liest du bitte 
als nächstes das Kapitel zu Funktionsparametern und -Rückgabewerten in 
deinem C-Buch. Denn globale Variablen nur sind Notbehelfe für 
Sonderfälle. Wann immer möglich, sollte man darauf verzichten.

Eine Funktion in der Art von
1
 int Add(int wert1, int wert2);
 z.B. wäre eine suabere Lösung.

Oliver
Gast #3531393
Lesenswert?

Olli,
ich hab einen DatenBuffer welcher gefüllt ist mit daten.
aus verschiedenen Funktionen muss ich auf die Daten dort drin zugreifen 
können.

Das geht leider nicht anders.

Das Volatile brauch ich nicht?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren