Funktionsaufruf ausklammer erzeugt Fehler (C8051, silabs)

Gast #5186881
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?
Gast
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.
Gast
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 (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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.