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 (version 😎 kann ü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 saugen

    edit: 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 😃


Anmelden zum Antworten