Hallo!
Ich habe gerade versucht meine globalen Variablen in eine cmd.h
auszulagern. Es geht z.B. um eine Variable vom Typ uint8_t mit der
Bezeichnung who. Diese wird außerdem in cmd.c von einer Funktion, sagen
wir be_my_admin(), verändert.
Jetzt habe ich eben schmerzlich erfahren, dass wenn man static in cmd.h
benutzt die Variable wohl irgendwie zweimal existiert und jede Änderung
nicht in main.c ankommt. Also habe ich static weggelassen und jetzt
dreht mir der Compiler durch! Er sagt mir ich hätte who mehrmals
definiert. Laut Suchfunktion habe ich aber in allen Datei nur ein
einziges Mal who in Verbindung mit uint8_t geschrieben. Außerdem kommt
diese Fehlermeldung nicht wie üblich unter "Build" mit rotem Punkt zum
Vorschein, sondern erst "Message", dass es PRobleme mit der elf-Datei
gibt.
cmd.o:(.data+0x4): multiple definition of `who'
main.o:(.data+0x0): first defined here
Irgendwas trotteliges steckt im Code drin, denn ich habe versucht den
Fehler "im kleinen" zu reproduzieren und da lief es. Also so habe ich es
versucht nachzustellen, aber wie gesagt - das funktioniert so:
1 | // --- main.c ----------------------------
|
2 | #include "cmd.h"
|
3 | extern uint8_t who; // mit oder ohne diese Zeile spielt keine Rolle
|
4 |
|
5 | int main(void)
|
6 | {
|
7 | who = 0;
|
8 | be_my_admin();
|
9 | return 0;
|
10 | }
|
11 | // --- cmd.h -----------------------------
|
12 | #ifndef CMD_H
|
13 | #define CMD_H
|
14 |
|
15 | #include <stdint.h>
|
16 |
|
17 | #define UID_ADMIN 0xFF
|
18 |
|
19 | uint8_t who;
|
20 |
|
21 | void be_my_admin(void);
|
22 |
|
23 | #endif
|
24 | // --- cmd.c -----------------------------
|
25 | #include "cmd.h"
|
26 |
|
27 | void be_my_admin(void)
|
28 | {
|
29 | who = UID_ADMIN;
|
30 | return;
|
31 | }
|
Fällt irgendjemanden spontan ein, wo ich suchen muss? Dieser Fehler
nervt mich ganz besonders, weil vor dem Umpacken alles so schön
funktionierte.
Grüße!