Programmierstandard
-
Hallo,
ich möchte mein derzeitige Projekt gerne nach einem Programmierstandard entwickeln um die Fehlerrate zu verringern.
Was gibts denn so für Standards?
Welcher Standard wäre für mein Projekt sinnvoll(ParametrierSW, mit RS232-Schnittstelle, kleines - mittelgroßes Projekt)?
Bisher habe ich nur von MISRA gehört, was haltet Ihr von MISRA?
-
geht so, man muss sich nur strikt dran halten, damit das was bringt.
manche toolschains (z.b. iar) haben auch 'nen misra-checker eingebaut.
aber ich finde es geht doch nix über 'lint' (pc-lint, splint)...
pc-lint (versionkann übrigens auch verletzung von misra-regeln erkennen.
-
Find ich die MISRA-Regeln irgendwo im Netz?
-
kannste nur kaufen, kostet 50€ oder so...
...oder vielleicht per filesharing saugenedit: such mal mit google nach
"Guidelines for the use of the C language in critical systems" filetype:pdf
vielleicht liegt irgendwo eine vollversion
-
Nee im Netz ist nichts zu finden.
Werde mich wohl mal in der Bibliothek umschauen müssen.
-
Ich hab irgendwo mal eine Liste diverser Regeln gesehen, manche fand ich gut, andere weniger.
Was ich z.B. gut finde ist:
while(1); // verboten while(1){ } // erlaubt
Was ich weniger prickelnd fand, war das hier:
if(foo = strstr(bar, baz)){ // verboten } foo = strstr(bar, baz); if(foo != NULL){ // erlaubt }
-
hier sind ein paar aufgelistet: http://www.parasoft.com/jsp/products/article.jsp?label=Misra-User
btw: ich würde ja noch eine regel hinzufügen
-> always open curly brace on a new line
-
ten schrieb:
btw: ich würde ja noch eine regel hinzufügen
-> always open curly brace on a new line
/me slaps net
-
Na das sind ja schon ein paar regeln.
Vielen Dank!!!
-
TactX schrieb:
Was ich z.B. gut finde ist:
while(1); // verboten while(1){ } // erlaubt
Ein while(1); steht in allen meinen Embedded-Projekten am Ende der main()-Funktion. Was soll while(1){} für eine Vorteil bringen?
Ich glaube jeder entwickelt mit der Zeit seine eigenen Regeln um einigermaßen guten Code zu schreiben. Seit ich wieder vermehrt in C schreibe benutze ich beispielsweise diese Regel relativ oft:
free(some_malloced_pointer); some_malloced_pointer = 0;
-
union NumericType // violation { int iValue; long lValue; double dValue; }; typedef union { // Violation char *a, b; float f[20]; } TheUnion;
Output
Do not use unions.Welchen Sinn hat denn diese Regel?
-
Hi,
ich glaube, dahinter steht die Erfahrung, dass
- einerseits mit unions sehr viele Fehler passieren (was macht ein Compiler wirklich aus einer union ?) und
- andererseits sie sehr viel seltener wirklich nötig sind, als der landläufige Programmierer so meint. Nicht selten setzt man lieber eine union ein, wo man sich besser 10 Minuten Gedanken über sein Programm(design) machen sollte...
... inc finde die Richtlinie übrigens gut.
Gruß,
Simon2.
-
mastercpp schrieb:
TactX schrieb:
Was ich z.B. gut finde ist:
while(1); // verboten while(1){ } // erlaubt
Ein while(1); steht in allen meinen Embedded-Projekten am Ende der main()-Funktion. Was soll while(1){} für eine Vorteil bringen?
Das while(1) war eh nur als Beispiel. Allgemein gilt es damit folgendes zu vermeiden:
while( Expression ); { // ... }
Oder auch sowas:
if( Expression ) foo = bar; baz = 3.14; foobarbaz = 0;
-
mastercpp schrieb:
Ein while(1); steht in allen meinen Embedded-Projekten am Ende der main()-Funktion.
der klimawandel lässt grüssen