Hallo, ich möchte hier gar nicht meinen ganzen Sourcecode zeigen, sondern nur eine Fehlerbeschreibung geben, welche ich derzeit nicht nachvollziehen kann. Ich benutze einen C8051F580 von Silicon Labs und deren IDE mit Keil Compiler. Mein Sourcecode kann ohne Fehler übersetzt werden. Klammere ich nun einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//" aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21 Fehler, die vorher eben nicht da waren. Nach meinem Verständnis kann es durch die Wegnahme von Sourcecode doch nicht zu Fehlern kommen, ich entferne doch nur Quellcode? Die Fehler sind unter anderem: - ADDRESS SPACE OVERFLOW - REFERENCE MADE TO ERRONEOUS EXTERNAL - PUBLIC REFERS TO IGNORED SEGMENT Woran kann das liegen?
PS: Die Fehler treten nur auf, wenn ich "Rebuild All" starte. Mit "compile current file" kann ich Source-Datei, wo ich den Kommentar eingedfügt habe komischerweise übersetzen.
Otto schrieb: > Mein Sourcecode kann ohne Fehler übersetzt werden. Klammere ich nun > einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//" > aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21 > Fehler, die vorher eben nicht da waren. Eine Frage die nach 10 Sekunden Google geklärt wäre. Stichwort: Version des eingesetzten C Standards.
Otto schrieb: > ich möchte hier gar nicht meinen ganzen Sourcecode zeigen Es reicht völlig, ihn so zu kürzen, daß der Fehler immer noch auftritt. Ohne Source einen Fehler in der Source zu finden, ist schlicht ein Ding der Unmöglichkeit.
Aber warum erzeugt das Entfernen eines Funktiosnaufrufes einen Übersetzungs-Fehler, hingegen keinen, wenn ich diesen drin lasse?
@Otto (Gast) >Mein Sourcecode kann ohne Fehler übersetzt werden. Super. >Klammere ich nun >einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//" >aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21 >Fehler, die vorher eben nicht da waren. Dann hast du möglicherweise eine Klammer zuviel oder zuwenig auskommentiert. Das kann vor allem dann passieren, wenn man if() Statements ohne Klammern nutzt und die unsichtbare, impliziert Strukturebene übersieht. Darum sollte man bei if(), for(), while() IMMER mit einer Klammer arbeiten, auch wenn dort nur eine einzige Anweisung drinsteht. Das gleiche gilt für Makros, welche Anweisungen enthalten.
Otto schrieb: > Nach meinem Verständnis kann es durch die Wegnahme von Sourcecode doch > nicht zu Fehlern kommen, ich entferne doch nur Quellcode? Keil auf 8051 macht Laufzeitanalyse, u.a. für Variablen Overlays. Wenn da jetzt die Funktionsaufrufe fehlen, belegen lokale Variablen in den nicht aufgerufenen Teilen plötzlich eigenen Speicherplatz -> data Segment läuft voll.
Fehlermeldungen dienen ja nicht der Unterhaltung, auch wenn es viele so glauben mögen, sie dienen der Information. Erstmal ist wichtig, welche Instanz den Fehler meldet, ist es der Compiler oder der Linker. Und dann ist eigentlich nur die erste Fehlermeldung wichtig, alles andere sind oft Folgefehler. Insbesondere der Filename und die Zeilennummer bezeichen fast immer die Nähe des Bereichs, wo man den Fehler gemacht hat. Leider lassen Hilfesuchende diese oft weg und erwarten vom Helfer, daß er sich durch den gesamten Code wühlen soll. Und dann muß man sich nur den exakten Wortlaut in Ruhe durch den Kopf gehen lassen.
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.