Forum: Compiler & IDEs MISRA Check Fehler


von Dirk F. (dirkf)


Angehängte Dateien:

Lesenswert?

Hallo,
habe den MISRA-checker von Microchip gekauft und installiert.
Kleines Testprogramm für den Anfang:

1
int Nestv = 0;
2
3
void main (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)
: Verschoben durch Moderator
von Clemens L. (c_l)


Lesenswert?

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.
: Bearbeitet durch User
von Dirk F. (dirkf)


Lesenswert?

Danke
von Frank O. (fop)


Lesenswert?

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.
von Nick (b620ys)


Lesenswert?

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
von Harald K. (kirnbichler)


Lesenswert?

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/
von Bruno V. (bruno_v)


Lesenswert?

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.
von Oliver S. (oliverso)


Lesenswert?

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
von Harald K. (kirnbichler)


Lesenswert?

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.
von Nick (b620ys)


Lesenswert?

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!
von Harald K. (kirnbichler)


Lesenswert?

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.
von Nick (b620ys)


Lesenswert?

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.
von Nick (b620ys)


Lesenswert?

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++!
von Harald K. (kirnbichler)


Lesenswert?

(Eigentlich passt dieser Thread besser nach Compiler & Co, ob wohl einer 
der Moderatoren so nett wäre, ihn dort hin zu verschieben? - Danke!)
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
Noch kein Account? Hier anmelden.