mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Compiler Fehler


Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ist ein Fehler im Programm, da bin ich mir ganz sicher!

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo definiere ich sie Global? In main , vor main,....?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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().

Autor: Henning (Gast)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na das sagt dir doch dein compiler:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.