Forum: Compiler & IDEs Variable von anderer C Datei Verfügbar machen


von AnfängerLPC (Gast)


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

: Verschoben durch User
von Karl H. (kbuchegg)


Lesenswert?

entweder in deinem C-Lehrbuch unter 'extern' nachsehen, oder die 
Kurzfassung in
FAQ Punkt 9: Globale Variablen über mehrere Dateien
lesen.

: Bearbeitet durch User
von AnfängerLPC (Gast)


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;

}

von Peter II (Gast)


Lesenswert?

AnfängerLPC schrieb:
> ahh habs

das volatile ist nicht zwingend notwendig, es kommt darauf an was du mit 
der variabel machst.

von Karl H. (kbuchegg)


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
...

von Oliver (Gast)


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

von AnfängerLPC (Gast)


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?

von Mark B. (markbrandis)


Lesenswert?

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

Man kann auch einen Zeiger auf diesen Datenpuffer an eine Funktion 
übergeben.

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.