Probleme bein deklarieren

Gast #1676547
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??

:-(
Gast #1676651
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.
Gast #1676699
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?
Gast #1676740
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
#1676755
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
}

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