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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.