Hallo! Gerne würde ich meine globalen Variablen in die main.h auslagern. Aufbau meiner main.h: #ifndef MAIN_H #define MAIN_H #include ... ... #ifndef GLOBAL_VARIABLES #define GLOBAL_VARIABLES uint8_t CH_eeprom EEMEM; //usw. ... #endif // GLOBAL_VaRS #endif // MAIN_H AVRGCC (Windows): Wenn ich Build mache, schmiert er nach einigen multiple definitons aus der main.h ab. Die Fehler beziehen sich auf alle Object-files, die die main.h einbinden. Alle Fehler beziehen sich auf eeprom.h Wo liegt das Problem? Danke für Hilfe!
Gast
#2272095
Timo P. schrieb: > uint8_t CH_eeprom EEMEM; extern uint8_t CH_eeprom EEMEM; + Variable dann in einer *.c deklarieren.
Gast
#2272105
Ach so: Timo P. schrieb: > #ifndef GLOBAL_VARIABLES > #define GLOBAL_VARIABLES sowas habe ich auch schon probiert (für Konstantendefinition). Das gilt nicht für das gesamte Projekt, sondern nur für das Modul. Hab' ich zumindest so interprtiert, als es nicht funktioniert hat.
Ich schätze, dass meine Idee nicht zulässig ist. Dann muss ich wohl die vars in eine c file packen und in der main dann als ext def. dann läuft es. Aber genau diesen Weg wollte ich mir sparen. - main.h von überall aus einbinden - main.h legt die vars nur einmal an - vars sind dann von überall aus erreichbar - ohne den Umweg über eine separate c-file.
Gast
#2272202
Hallo, wenn Du zwei .c-Dateien hast, die beide den genannten Code aus dem Header einbinden, werden beide .c-Dateien die Variable "CH_eeprom" anlegen und dann sagt der Linker natürlich, daß das nicht geht. Ich meine, Dein Denkfehler liegt hier: Das Verhindern von mehrfach-Inkludieren bezieht sich immer nur auf eine einzelne .c-Datei. Bsp: Die Dateien 1.c und 2.c inkludieren beide main.h. Der Konstrukt #ifndef MAIN_H #define MAIN_H verhindert jetzt, daß beim Übersetzen von 1.c der Code aus main.h mehrfach in 1.c auftreten kann. Das Konstrukt kann aber nicht verhindern, daß 2.c den Code aus main.h ebenfalls einbindet! Grund: Jede .c-Datei wird ja vom Compiler autotark für sich übersetzt. D.h. ein #define, das in 1.c sichtbar ist, ist nicht zwangsläufig auch in 2.c sichtbar. D.h. das #define MAIN_H, das beim Compilieren von 1.c gesetzt wurde, ist nicht mehr gesetzt, wenn 2.c compiliert wird.
Hi, was Du aber durchaus machen kannst:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
oder (m.E. deutlich geschickter) In allen c-Datei AUßER EINER
1 | |
2 | |
3 | |
In main.h
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.