Splint Quellcodeüberprüfung bricht ab

#3233757
Lesenswert?

Hallo, ich möchte meinen Code mit Splint überprüfen.

Dazu habe ich unter Ubuntu per sudo apt-get install splint das Ganze mal 
installiert.

Per Aufruf "splint main.c" sagt er mir, das er die eingebundene 
bcm2835.h nicht findet. Soweit logisch,isch hab ihm ja noch nicht 
verraten wo die liegt.

Die bcm2835.c und .h liegen in einem Ordner auf dem Desktop, den ich 
testweise per Parameter "-I Desktop/..." hinzufüge.

Er meckert weiterhin rum, das er im header irgendwo den Posixstandart 
braucht und schlägt vor, "+posixlib" anzufügen.
1
splint  Desktop/main.c -I Desktop/bcm2835-1.25/src/ +posixlib
2
Splint 3.1.2 --- 03 May 2009
3

4
Desktop/main.c:42:9: #warning 
5
  Preprocessing error. (Use -preproc to inhibit warning)
6
Desktop/main.c:271:54: Comment starts inside comment
7
  A comment open sequence (/*) appears within a comment.  This usually means an
8
  earlier comment was not closed. (Use -nestcomment to inhibit warning)
9
Desktop/main.c:802:28: Comment starts inside comment
10
Desktop/bcm2835-1.25/src/bcm2835.h:350:36:
11
    Parse Error. (For help on parse errors, see splint -help parseerrors.)
12
*** Cannot continue.
Ist jetzt das Ergebnis.

Die Fehlermeldungen sind soweit plausibel, da ich dort noch
1
#warning
 drinne habe. Auch die Kommentarwarnungen sind in Ordnung und werden 
später beseitigt.


Allerdings bringt er in der Headerdatei Fehler und kann anscheinend 
deswegen nicht weitermachen. Wie vermeide ich, dass andere Dateien außer 
meine main.c geprüft werden?

Oder sagt mir das, dass meine main.c frei von Fehlern ist (was ich nicht 
glaube bei 1000 Zeilen)?
Gast #3233816
Lesenswert?

Es sagt dir, daß schon in den allerersten Zeilen so viele Fehler sind, 
daß er danach nicht weitermachen kann. Deine main.c hate r noch gar 
nicht angesehen.

Und nein, du kannst deine main.c nicht ohne die dafür benötigten header 
compilieren.

Oliver
Gast #3233840
Lesenswert?

Gar nicht.

Wenn das fertige header sind, solltest du herausfinden, warum sprint die 
nicht will.

Wobei die Fehlermeldungen vermuten lassen, daß die Fehler doch in deinem 
Code stecken. Was steht denn da in Zeile 271?

Oliver
Gast #3233849
Lesenswert?

Es ist normal, dass Du Lint (mit welchem Geschmack auch immer) für den 
Codecheck beim ersten Mal in grösserem Umfang durch Optionen und 
Hilfsdateien auf den Quellcode anpassen musst.
Ursächlich hat das mit dem Compiler und den Libraries zu tun.

Da musst Du Schritt für Schritt durch. Nur Mut. Es ist zu schaffen.

Ein gerütteltes Maß an Programmiererfahrung auch mit verschiedenen APIs 
und Libraries und doch auch einige Englischkenntnisse sind notwendig.
#3233853
Lesenswert?

Ich habe da einen Kommentar // der mit dem Zeichen * beginnt. Somit 
macht er ein /* daraus. Ich habe schon Leerzeichen eingefügt.

Jetzt sind die Fehler wie erwartet weg, aber mehr auch nicht.

Ich hatte Testweise mal alle Librarys auskommentiert und dann nach einem 
Durchlauf wieder eingefügt.

Ich nutze:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <bcm2835.h>
4
#include <fcntl.h>
5
#include <unistd.h>
6
#include <math.h>

Jetzt meckert er nicht mehr bei der bcm2835.h, sondern bei der fcntl.h

1
splint  Desktop/main.c -weak -preproc -posixlib
2
Splint 3.1.2 --- 03 May 2009
3

4
/usr/include/fcntl.h:110:7: Parse Error: Non-function declaration:
5
    __BEGIN_DECLS : int. (For help on parse errors, see splint -help
6
    parseerrors.)
7
*** Cannot continue.
Gast #3233857
Lesenswert?

Ach ja, dass:

>Hm und wie prüfe ich meinen Quellcode nun, ohne auf Fehler in
>eingebundenen Dateien einzugehen?

geht schon prinzipiell nicht, es sei denn man bräuchte in dem Projekt 
keine H-Dateien.
In H-Dateien sind sowohl Deklarationen als auch Preprozessor-Anweisungen 
enthalten die in der Regel notwendig sind, main zu übersetzen. Also muss 
zuer Lint-Prüfung das H-File auch verstanden sein.
Gast #3233865
Lesenswert?

Du solltest wirklich mal die Anweisungen zu Splint lesen. Das sind 
absolut typische Probleme. Und mit ein bisschen Englisch kommt man sogar 
drauf was für welche. Du willst doch jetzt nicht hier sämtliche 
Lint-Meldungen von uns in Anweisungen zur Korrektur umwandeln lassen, 
oder?
Gast #3233884
Lesenswert?

>Stimmt, aber ich versteh die Reaktion von Splint darauf trotzdem nicht?
>Irgendwie muss ich doch meinen Quellcode trotzdem prüfen können?

Du verkennst die Situation: Das was Dich, aus Deiner Sicht daran 
hindert, den Code zu prüfen ist genau das Ergebnis der Prüfung. Lint 
meldet Dir Probleme mit Deinem Quellcode. Die musst Du beseitigen. Dafür 
benutzt Du ja Lint.

Zugegeben, etwas tiefer geschaut, sind das Anpassungen an Lint, das 
schrieb ich ja schon oben. Die musst Du nun erstmal erledigen. Daran 
führt kein Weg vorbei. Das schrieb ich auch schon oben. Also: Mach Dir 
ran.
Gast #3233888
Lesenswert?

Dann kommen wir dann doch mal zu der eigentlich interessanten Frage:

WARUM ?

Den, ganz ehrlich, deine Fragen und auch dein Vorgehen deuten nicht 
darauf hin, daß du mit dem Ergebnis eines irgendwann einmal 
erfolgreichen sprint-Laufes viel anfangen könntest.

Aktuelle C-Compiler sind inzwischen in der Lage, die allermeisten 
Nickligkeiten im Code selber zu entdecken. Du musst halt den 
Warnungslevel ensprechend einstellen, dann meckert dir der Compiler 
schon alles fragwürdige an.

Was also versprichst du dir von sprint ?

Oliver
#3233897
Lesenswert?

Ich verspreche mir davon, Schussligkeitsfehler wie zum Beispiel nicht 
initialisierte Variablen zu melden die der Compiler aber nicht 
anmeckert.


Ich werde mir die Compileroptionen nochmal anschauen.

Aber ist es nicht trotzdem verwunderlich, dass bei etablierten librarys 
Fehler angezeigt werden?
Gast #3233906
Lesenswert?

>Aber ist es nicht trotzdem verwunderlich, dass bei etablierten librarys
>Fehler angezeigt werden?

Nun, es gibt ja nicht nur eine etablierte Library sondern mehrere.
Dabei meine ich nicht das Widersprüche oder sagen wir "Reibungen" 
zwischen einer libusb und einer math auftreten sondern zwischen libusb 
und libusb und math und math. Verschiedene Posix-Stände, BSD, C99, ANSI, 
etc.,  was weiss ich... etcpp.

Das kann man hier nur andeuten; ist ein umfängliches Thema. Deswegen ja 
die Frage nach Deiner Erfahrung, die Du leider nicht beantwortet hast.
Gast #3233911
Lesenswert?

>Ich verspreche mir davon, Schussligkeitsfehler wie zum Beispiel nicht
>initialisierte Variablen zu melden die der Compiler aber nicht
>anmeckert.

Was ist denn das für ein Compiler? Gab's den ab einem Liter tanken dazu? 
:-) Besorg Dir nen anständigen Compiler. gnuc z.B.

Nimm mir den rauhen Ton nicht allzu übel. Du hast da, Deinem 
Kenntnisstand nach, leider in ein Nest von Wespen gestossen, denen Du 
nicht gewachsen bist.

Stelle einfach alle Warnings an. Das sollte für den Hausgebrauch 
reichen.
Gast #3233919
Lesenswert?

>Naja erweiterte Grundlagen würde ich behaupten.

Also K&R, 2. Auflage (ANSI) bis Seite 50 oder 90? Oder was?

Falls das zutrifft, bist Du weit von dem Punkt entfernt wo Du Lint 
sinnvoll verwendest. Allermindesten noch ein Jahr würde ich sagen. In 
der Regel lernst Du erst die Techniken und die möglichen Fehler.

Lint ist eher was für die Leute die alle die blöden Fehler schonmal 
gemacht und selbst gefunden haben und in einem 20-Module-Projekt nach 
der x-ten Wiederholung davon suchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren