MISRA Check Fehler

OP #8036686
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)

Angehängte Dateien:
: Verschoben durch Moderator
#8036692
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
#8037034
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.

#8037125
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/

#8037169
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.

#8037340
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!

#8037351
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.

#8037365
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.

#8037460
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++!

#8068412
Lesenswert?

Bruno V. schrieb:

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).

Ja, PC-Lint war lächerlich günstig, für den Mehrwert, den es gebracht hat. Viel mehr als 400 € kann das nicht gekostet haben.

Ich habe mit PC-Lint bzw. mit dem Handbuch dafür mehr über C gelernt als aus jedem Buch oder Tutorial.

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