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?
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.
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().
Ah ja habs mit etwas knobeln herausgefunden. Ganz schön verwirrend. Wo kann man das nachlesen?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.