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?? :-(
Außerdem hast du unterschlagen, daß du die Variable auch noch in test.h deklariert hast. Wie denn?
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.
natürlich wird die variabe in test.h deklariert. :-) Jetzt klappts. Dank euch
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 |
???
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.
ja, ein #define ohne extern. Oder den Compiler entsprechend aufrufen, z.B. -DX Oder was hast du vor?
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?
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
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
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.