Hallo,
habe den MISRA-checker von Microchip gekauft und installiert.
Kleines Testprogramm für den Anfang:
1
intNestv=0;
2
3
voidmain(void)
4
{
5
Nestv=0;
6
Nestv++;
7
}
Warum wird dieser Fehler erzeugt ?
Starting MISRA C:2012 Compliance Check (Cppcheck v2.11)...
Checking main.c ...
main.c:1:5: [misra-c2012-8.4] Required: A compatible declaration shall
be visible when an object or function with external linkage is defined
int Nestv = 0;
^
MISRA C:2012 Compliance Check (Cppcheck) failed with 1 issue(s)
Du definierst eine globale Variable, die auch in anderen Modulen
verwendet werden kann. Damit die anderen Module darauf zugreifen können,
brauchen sie eine Deklaration in einer .h-Datei. MISRA verlangt hier,
dass die .h-Datei mit der Deklaration auch in diesem Modul verwendet
wird, damit Konflikte zwischen Deklaration und Definition erkannt werden
können.
Falls es nicht global sein soll, muss es 'static' sein.
Und wenn das korrigiert ist, kommt vermutlich der nächste Mecker, dass
Du einen Variablentyp (int) direkt verwendest, dessen Größe von der
Implementierung des Compilers abhängt. Gefordert sind Typedefs, die so
einen Typ mit einem Namen verbinden, der das Fassungsvermögen angibt, so
dass man beim Compilerwechsel nur diese Typedefs an einer Stelle auf
Stand bringen muss. Wer seine Bequemlichkeit voll ausleben mag, benutzt
dafür die Datei stdint.h, die mittlerweile zu Compilern mitgeliefert
wird.
Ich hab mich gerne mit PC-Lint gequält. Das gab es scheinbar eine Zeit
lang nicht mehr.
Inzischen ist aber ein PC-Lint Plus zu einem nicht genannten Preis
erhältlich. Das kann auch MISRA, AUTOSAR und CERT
Nick schrieb:> Ich hab mich gerne mit PC-Lint gequält. Das gab es scheinbar eine Zeit> lang nicht mehr.
Dazu gibt es Alternativen, auch kostenlose.
Einerseits cppcheck (das trotz des Namens auch in der Lage ist, C-Code
zu prüfen)
https://cppcheck.sourceforge.io/
und andererseits ein moderner C-Compiler. Clang/llvm ist sehr viel
gründlicher als etliche ältere Compiler.
Nick schrieb:> Inzischen ist aber ein PC-Lint Plus zu einem nicht genannten Preis> erhältlich.
Firmen, die Produkte nur "auf Anfrage" verkaufen, insbesondere, wenn es
sich um Software handelt, sollen einfach pleitegehen.
Und das hier ist leider so ein Beispiel: https://pclintplus.com/
Harald K. schrieb:> Firmen, die Produkte nur "auf Anfrage" verkaufen, insbesondere, wenn es> sich um Software handelt, sollen einfach pleitegehen.
PC-Lint war damals relativ preiswert (hab das unterschriebene Dokument
von 2004 hier, 10er-Lizenz "auf Vertrauensbasis", leider kein Preis,
jedenfalls 3stellig).
PC-Lint war m.E. deutlich zuverlässiger und besser also die ganzen
"Kommerziellen Lösungen" für Misra, die dann fancy Reports vordefiniert
hatten.
Heute scheint es Vector zu gehören und damit sicher zu den
"kommerziellen" Produkten, die kein normaler Mensch bezahlt und von
Consultern "im Rundum-Paket" aufgeschwatzt werden.
Harald K. schrieb:> Clang/llvm ist sehr viel> gründlicher als etliche ältere Compiler.
clang-analyzer und Konsorten sind das Mittel der Wahl.
Nur helfen die auch nicht weiter, wenn die Aufgabe halt MISRA erfordert.
Oliver
Oliver S. schrieb:> Nur helfen die auch nicht weiter, wenn die Aufgabe halt MISRA erfordert.
Richtig.
Nur wird man dann auch das nötige Geld haben, bzw. sollte das beim
Auftraggeber einfordern, der MISRA vorschreibt.
Harald K. schrieb:> Einerseits cppcheck (das trotz des Namens auch in der Lage ist, C-Code> zu prüfen)
Ich hatte mir das PC-Lint vor Dekaden mal privat gekauft, noch zu
D-Mark-Zeiten.
Vor paar Jahren (8) in der Arbeit. Hat glaub ich 400 € gekostet. Ich
fand das immer recht hilfreich und lehrreich.
Gimpel-Software wurde 2022 verkauft und seitdem braucht man wohl keine
Preise mehr angeben.
"Wer nach dem Preis frägt kann es sich nicht leisten"
Harald K. schrieb:> https://cppcheck.sourceforge.io/
Danke, das schau ich mir an!
Nick schrieb:> Ich hatte mir das PC-Lint vor Dekaden mal privat gekauft, noch zu> D-Mark-Zeiten.
Ich habe vor langer, langer Zeit mal mit der im kompilierbaren
Sourcecode vertriebenen Version gearbeitet, die wurde unter os-9/68k
eingesetzt. Damit kann man heute praktisch nichts mehr anfangen, da
diese Version halt nur C89 (das damals auch als "ANSI-C" bezeichnet
wurde) kannte.
Später kam mir auch mal eine Windows-Version davon in die Finger (über
die Quelle und deren Legalität decken wir den sanften Mantel des
Schweigens) ... das war schon ein gutes Werkzeug, aus irgendwelchen
Gründen habe ich bzw. mein Arbeitgeber das damals nicht weiterverfolgt.
Jetzt dürfte das hier ganz interessant sein:
https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
(Tabelle nach der Spalte "Free Software" sortieren)
MISRA taucht allerdings nur bei kommerziellen Produkten auf - bei
cppcheck ist es nur in der "Project"- und "Enterprise"- Version
enthalten -- erstaunlicherweise nennt auch diese Firma keine Preise
(https://www.cppcheck.com/plans-pricing).
Und so sieht es auch bei Astrée aus, und vermutlich auch bei allen
anderen.
MISRA heißt Handaufhalten.
Harald K. schrieb:> Jetzt dürfte das hier ganz interessant sein:
Ah, danke für die Erinnerung!
Ich hatte vor ca. 2 Jahren das Frama-C angeschaut. Hat aber nicht so
recht fuktioniert. Kann an mir gelegen haben, weil ich nicht genug
motiviert war. Hat aber dennoch einen guten ersten Eindruck gemacht.
Ich probier es nochmal ...
Ich arbeite nur mit MPLAB-X und gelegentlich mit Rust.
Bei MPLAB-X ist man halt auf den Compiler festgenagelt, PC-Lint wird
aber unterstützt. Rust selbst ist schon pingelig genug.
Jetzt hab ich mir noch mal kurz das Frama-C angeschaut und weiß, warum
ich das gelöscht hab.
Das verwendet OCaml und man muss den ganzen OCaml-Kladderadatsch
installieren. Ich hab mich mal in OCaml versucht, das war mir aber
einfach zu obskur.
Wer es dennoch mit Frama-C versuchen will, es gibt einige ausführliche
Videos zu Frama-C.
Das kann aber nur C, kein C++!