Forum: Compiler & IDEs Probleme bein deklarieren


von Sebastian (Gast)


Lesenswert?

Hallo Leute,

ich habe eine main.c und eine test.c

in der main.c wird eine globale variable definiert mit:

volatile uint8_t Variable = 0;

in der test.c habe ich sie wie folgt deklariert:

extern uint8_t Variable;

Ich bekomme den Fehler:

../main.c:35: error: conflicting type qualifiers for 'Variable'
../test.h:17: error: previous declaration of 'Variable' was here

Die Variable muss in der main stehen bleiben.

Was genau habe ich falsch gemacht??

:-(

von weene (Gast)


Lesenswert?

nimm mit das volatile.....

gehört zum Variablentyp...

von Klaus W. (mfgkw)


Lesenswert?

Außerdem hast du unterschlagen, daß du die Variable auch noch in
test.h deklariert hast.

Wie denn?

von Guckst Du (Gast)


Lesenswert?

bei "extern..." muss meiner Ansicht nach, auch das volatile stehen.

von Klaus W. (mfgkw)


Lesenswert?

ja

Aber ob es unter dem Strich auch funktioniert (inkl.
Linken) hängt davon ab, wie es in test.h steht.

test.h ist aber leider geheim.

von Sebastian (Gast)


Lesenswert?

natürlich wird die variabe in test.h deklariert. :-)

Jetzt klappts. Dank euch

von Sebastian (Gast)


Lesenswert?

Jetzt ist mir doch noch ein Problem bzw. eine Frage in dem Zusammenhang 
gekommen.

gibt es eine Möglichkeit eine Art externen "define" zu machen??

so:
1
extern #define X

???

von Rolf Magnus (Gast)


Lesenswert?

Sebastian schrieb:
> Jetzt ist mir doch noch ein Problem bzw. eine Frage in dem Zusammenhang
> gekommen.
>
> gibt es eine Möglichkeit eine Art externen "define" zu machen??
>
> so:
> extern #define X

Wie sollte das denn gehen? extern ist eine Linker-Angelegenheit, und 
alle #defines werden schon vom Präprozessor, praktisch noch vor dem 
Compiler, aufgelöst, lange bevor der Linker an die Reihe kommt.

von Sebastian (Gast)


Lesenswert?

Hmm... Macht Sinn.

Gibt es denn einen workaround?

von Klaus W. (mfgkw)


Lesenswert?

ja, ein #define ohne extern.
Oder den Compiler entsprechend aufrufen, z.B. -DX

Oder was hast du vor?

von Sebastian (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Oder den Compiler entsprechend aufrufen, z.B. -DX

Das verstehe ich nicht.

Ich habe eine Variable "X" die ich in mehrern .c verwende. Sie sollte 
veränderbar sein. Sprich ich lege die Variable per #define in der main.c 
fest und sie wird entsprechend in allen anderen .c, welche sie ebenfalls 
verwenden, genutzt.

Muß ich mir denn statt eines #define eine globale Variable hierfür 
anlegen, auf die ich dann von den externen .c mit extern zugreife?

von Karl H. (kbuchegg)


Lesenswert?

Sebastian schrieb:

> Muß ich mir denn statt eines #define eine globale Variable hierfür
> anlegen, auf die ich dann von den externen .c mit extern zugreife?

http://www.mikrocontroller.net/articles/FAQ#Praktische_Durchf.C3.BChrung

von Sebastian (Gast)


Lesenswert?

das hab ich gelesen und auch verstanden denke ich.

Mein Problem ist aber, dass ich 3 Variablen habe "sekunde" ,"minute" und 
"stunde". Sie sollen der Zeitgeber für eine Funktion Sein.

Da ich EINE dieser Variablen in MEHREREN .c verwende, möchte ich jetzt 
nicht jedes mal in jeden header der jeweiligen .c gehen und per define 
meine Zeitgeber Variable festlegen, sondern würde dies gerne von EINEM 
Punkt aus tun.

Vielleicht drücke ich mich falsch aus:
1
a.h
2
#define zeit sekunde
3
4
b.h
5
#define zeit sekunde
6
7
c.h
8
#define zeit sekunde
9
10
main.c
11
#define zeit sekunde // <-- die möchte ich umlegen und alle anderen sollen mitmachen

von Karl H. (kbuchegg)


Lesenswert?

Sebastian schrieb:
> das hab ich gelesen und auch verstanden denke ich.

Hast du auch den Teil mit dem

#define EXTERN extern

gelesen und verstanden?


> Da ich EINE dieser Variablen in MEHREREN .c verwende, möchte ich jetzt
> nicht jedes mal in jeden header der jeweiligen .c gehen und per define
> meine Zeitgeber Variable festlegen, sondern würde dies gerne von EINEM
> Punkt aus tun.

Dann mach dir doch EIN Header File, in dem deine Variablen und Makros 
enthalten sind und das includierst du dann wo du es brauchst.

time.h
******
1
#ifndef EXTERN extern
2
3
EXTERN uint8_t minuten;
4
EXTERN uint8_t sekunden;
5
EXTERN uint8_t stunden;
6
7
#define SEC_PER_MINUTE 60


main.c
******
1
#define EXTERN
2
3
#include "time.h"
4
5
int main()
6
{
7
  verwende minuten, sekunden, stunden
8
  und SEC_PER_MINUTE
9
}

time.c
******
1
#include "time.h"
2
3
int foo()
4
{
5
  verwende minuten, sekunden, stunden
6
  und SEC_PER_MINUTE
7
}

a.c
***
1
#include "time.h"
2
3
int bar()
4
{
5
  verwende minuten, sekunden, stunden
6
  und SEC_PER_MINUTE
7
}

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.