Forum: Mikrocontroller und Digitale Elektronik Compiler Fehler


von Henning (Gast)


Lesenswert?

Was mach ich Falsch wenn mir avr-gcc das ausspuckt

button.c:11: multiple definition of `key_valid'
anzeige.c:23: first defined here

Bzw. wie mach ichs richtig?

von Bernd (Gast)


Lesenswert?

da ist ein Fehler im Programm, da bin ich mir ganz sicher!

von Hubert G. (hubertg)


Lesenswert?

Du hast die Variable "key_valid" mehrfach definiert. Der Compiler hat 
sie in der Datei anzeige.c das erste mal gefunden.
Nsch einem Blick in die Glaskugel würde ich sagen Global definieren wäre 
eine Möglichkeit, böse Zungen würden sagen, der richtige Eintrag gehört 
in die Zeile 28.

von Henning (Gast)


Lesenswert?

Und wo definiere ich sie Global? In main , vor main,....?

von Klaus W. (mfgkw)


Lesenswert?

Wenn der Compiler die Variable in button.c und in anzeige.c sieht,
hast du wahrscheinlich den einen Quelltext mit #include in den
anderen eingefügt - was ohnehin ziemlich schusselig ist.
Es gibt Quelltexte (*.c, *.cpp), die werden direkt kompiliert
und die  enthalten bei Bedarf ein paar #include, die globalen
Variablendefinitionen sowie Funktionsdefinitionen, und es
gibt Headerdateien (*.h), die mit #include eingefügt werden und
nur #define, weitere #include, Funktions-/Variablen-Deklarationen
und Typdefinitionen enthalten.

Eine globale Variable kann in einer Headerdatei DEKLARIERT werden
(mit extern davor), und in genau einer *.c DEFINIERT (ohne extern).

Wenn du sie in main() definierst, ist sie nicht mehr global,
sondern lokal, nämlich in main().

Die Definition von globalen Variablen steht außerhalb aller
Funktionen, also z.B. nach den ganzen #include und vor main().

von Henning (Gast)


Lesenswert?

Ah ja habs mit etwas knobeln herausgefunden. Ganz schön verwirrend. Wo 
kann man das nachlesen?

von Klaus W. (mfgkw)


Lesenswert?

z.B. http://www.wachtler.de/ck/16_Aufteilung_mehrere_Quell.html
oder im C-Buch deines Vertrauens (vielleicht?).

Ob es so direkt in einem C-Buch steht, sei mal dahin gestellt.
Aber wenn man Deklarationen, Definitionen und den Präprozessor
verstanden hat (was mit einem halbwegs passablen Buch gehen sollte),
ist der Rest ziemlich logisch.

von zwieblum (Gast)


Lesenswert?

na das sagt dir doch dein compiler:

button.c:11: multiple definition of `key_valid'
anzeige.c:23: first defined here

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
Noch kein Account? Hier anmelden.