Hallo,
ich habe ein größeres C-Projekt, verwende ATStudio7 und Atmel Start.
Beim Compilieren kommen jetzt plötzlich viele Fehler dieser Art:
..."storage class specified for parameter 'torque_adjustments_t'
DSA_V0.01
P:\Entwicklung\Digitalaufnehmer-24Bit\SAME54_Clocktest\SAME54_Clocktest\
sensor_settings.h 59"
Ich weis noch vage, dass man den bekommt, wenn man bei einer Deklaration
den Strichpunkt am Ende vergessen hat, aber ich finde keinen Fehler.
Das Projekt besteht schon aus vielen .c und h Dateien, die noch letzte
Woche korrekt übersetzt wurden.
Gibt es irgend ein Tool, das nach solchen Fehlern sucht?
Wie kann ich die Fehlerstelle eingrenzen?
Elektrolurch schrieb:> Beim Compilieren kommen jetzt plötzlich viele Fehler dieser Art:> ..."storage class specified for parameter 'torque_adjustments_t'> DSA_V0.01> P:\Entwicklung\Digitalaufnehmer-24Bit\SAME54_Clocktest\SAME54_Clocktest\> sensor_settings.h 59"
Wo ist da ein Fehler? Ich sehe da nur, dass eine Speicherklasse
spezifiziert wurde...
> Ich weis noch vage, dass man den bekommt, wenn man bei einer Deklaration> den Strichpunkt am Ende vergessen hat
Könnte sein. Könnte aber auch was andres sein.
> aber ich finde keinen Fehler.
Ich auch nicht.
> Gibt es irgend ein Tool, das nach solchen Fehlern sucht?
Ja, der Compiler tut das.
> Wie kann ich die Fehlerstelle eingrenzen?
Hast du an dieser Datei was geändert? Bekomst du diesen Fehler beim
Compilieren jeder C-Datei in der dieser Header eingebunden ist? Hast du
Headerdateien in andere Headerdateien eingebunden? Hast du die
Reihenfolge der Headerdateien im C-Code geändert? Lässt sich die Version
von vorgestern noch compilieren? Was sagt das Vergleichstool, wenn du
die letzte compilierfähige Version mit der jetzigen vergleichst?
Elektrolurch schrieb:> Wie kann ich die Fehlerstelle eingrenzen?
Es wäre mir neu, daß bei Fehlermeldungen nicht der Dateiname und die
Zeilennummer ausgegeben wird.
Z.B.:
1
main.c:24:1:error:...
Der Fehler kann natürlich auch vorher passiert sein, z.B. in einer
Macrodefinition.
>> Hast du an dieser Datei was geändert?
Nicht willentlich, aber das Änderungsdatum zeigt, dass es diese Woche
überschrieben wurde.
>>Lässt sich die Version von vorgestern noch compilieren? Was sagt das
Vergeleichstool, wenn du die letzte compilierfähige Version mit der jetzigen
vergleichst?
Die Dateien werden doch nach Änderung sofort überschrieben?
Macht ATStudio versteckte Backups?
Es sind 5 ziemlich umfangreiche Dateien mit Datum dieser Woche...
Welches Vergleichstool meinst du? Welches ist dafür gut?
Ich denke Lothar wollte damit andeuten dass es normal wäre bei einem
solch "umfangreichen" Softwareprojekt ein regelmäßiges Backup zu machen.
Normalerweise nimmt man dafür ein Versionierungssytem, mit dem es
möglich wäre jeden gewünschten Stand wiederherzustellen.
Bei allen mit bekannten Versicherungssystemen ist auch gleich noch ein
Vergleichstool mit dabei. Damit könntest du die Unterschiede deines
letzten funktionsfähigen Stand zu jetzt feststellen.
Elektrolurch schrieb:> Nicht willentlich, aber das Änderungsdatum zeigt, dass es diese Woche> überschrieben wurde.
LOL. Es gibt seit mindestens 20 Jahren Versionierungssysteme. Es ist für
mich absolut unverständlich, diese nicht zu nutzen. Und wenn es nur für
einen selbst ist. Und nein man braucht dazu keinen Server: Git kommt mit
dem normalen Dateisystem aus, im einfachsten Fall nur mit dem
Projektordner.
Ich habe das Backup - schneller als gedacht.
Doch welches Programm eignet sich da am Besten dazu?
Oft wird man ja überschwemmt von den Änderungen, nur weil eine Leerzeile
unterschiedlich ist.
Elektrolurch schrieb:> Doch welches Programm eignet sich da am Besten dazu?
Zum Vergleich benutze ich unter Windows gerne Winmerge, unter Linux
Meld.
> Oft wird man ja überschwemmt von den Änderungen,> nur weil eine Leerzeile unterschiedlich ist.
Das kannst du in den genannten Programmen konfigurieren.
Normale Backups mache ich nur unregelmäßig alle 4-8 Wochen. Für meine
Quelltexte reicht das nicht, um solche Fälle wie deinen
nachzuvollziehen. An der Stelle hilft mir ein VCS (Versioning Control
System).
Früher habe ich dazu Subversion benutzt, heute Git. Für beide braucht
man keinen Server und sie können die oben genannten Programme einbinden.
http://stefanfrings.de/git/index.html
Elektrolurch schrieb:> Oft wird man ja überschwemmt von den Änderungen, nur weil eine Leerzeile> unterschiedlich ist.
Nö, die Tools können sich zeilenweise synchronisieren.
Wir benutzen TortoiseSVN.
Das stellt 2 Fenster nebeneinander dar, wo die Änderungen gut sichtbar
sind.
Ich habe Notepad++ mit Compare-Extension benutzt und habe jetzt den
Fehler gefunden:
Es war tatsächlich ein fehlender Strichpunkt hinter einer Deklaration in
einer ganz anderen Datei.
Ich finde es schade, dass der Compiler bei sowas nicht wenigstens eine
Warnung ausgibt. Meist ist ja der eigentliche Fehler viel weiter "oben",
oder wie hier, in einer anderen Datei.
Jedenfalls Danke an alle für eure Hilfe!
Elektrolurch schrieb:> Ich finde es schade, dass der Compiler bei sowas nicht wenigstens eine> Warnung ausgibt.
Könnte der Compiler ganz locker erkennen ob da ein Strichpunkt fehlt,
bräuchte man den Strichpunkt doch gar nicht mehr hinschreiben...
Elektrolurch schrieb:> Die Dateien werden doch nach Änderung sofort überschrieben?
Ähm ja klar, DU SELBER musst natürlich 1x am Tag das Projektverzeichnis
sichern, wenn du kein Managementsystem am Laufen hast.
Elektrolurch schrieb:> Wir haben eine Server-seitiges Backup
Glück gehabt. Mach solche Sicherungen in Zukunft einfach selber.
Elektrolurch schrieb:> Welches Vergleichstool meinst du? Welches ist dafür gut?
Ich nehme Beyond Compare. Aber auch Windiff (im Lieferumfang von Win10)
ist besser als nichts.
Elektrolurch schrieb:> Ich finde es schade, dass der Compiler bei sowas nicht wenigstens eine> Warnung ausgibt.
Der arme Kompiler kann den Fehler erst erkennen, wenn das Kind im
Brunnen liegt.
Hinzu kommt:
Leider sind die bisherigen C und C++ zu doof um deine Absichten im
Vorfeld analysieren zu können.
Bedenke:
Eine Deklarationszeile, mit vergessenem ; ist erstmal gültige Syntax.
Das Kind fällt danach in den Brunnen.
Cyblord -. schrieb:> Elektrolurch schrieb:>> Ich finde es schade, dass der Compiler bei sowas nicht wenigstens eine>> Warnung ausgibt.>> Könnte der Compiler ganz locker erkennen ob da ein Strichpunkt fehlt,> bräuchte man den Strichpunkt doch gar nicht mehr hinschreiben...
Hast Du in den Compiler-Optionen -Wall angegeben?
Elektrolurch schrieb:> Gibt es irgend ein Tool, das nach solchen Fehlern sucht?> Wie kann ich die Fehlerstelle eingrenzen?
Brain 2.0, auch Erfahrung genannt. Das ist einer der Bereiche beim
Programmieren, wo man tatsächlich aus den eigenen Fehlern lernt.
Oliver
Und ja, wenn ich den Fehler nochmal mache und kompiliere, finde ich nach
einem Wust anderer Fehler tatsächlich "parameter name omitted".
Aber da alle anderen ja nur Folgefehler sind, fiel mir das nicht auf.