Noch ne Frage zu MISRA-Regel



  • Was ist der unary minus operator?
    Was besagt die Regel 12.9?

    Rule 12.9:
    The unary minus operator shall not be applied to an expression whose underlying type is unsigned.

    Und was macht der comma operator?



  • Der unäre Minusoperator ist nix anderes als das hier:

    int a = 5;
    -a;    // unärer Minusoperator
    

    Der nächste Satz ist ja dann auch klar: Man sollte diesen Operator nicht auf unsigned Typen anwenden können, weil die nur nen positiven Wertebereich haben.

    Der Komma-Operator trennt einfach nur Ausdrücke, z.B.

    for(int i = 0, j = 0;;);
    


  • Das der Minus operator nicht auf unsigned Typen angewendet werden soll, ist ja schon logisch.

    Aber aus welchem Grund sollte kein comma operator verwendet werden, find ich irgendwie unnötig, naja.



  • Michael E. schrieb:

    Man sollte diesen Operator nicht auf unsigned Typen anwenden können, weil die nur nen positiven Wertebereich haben.

    laut dieser regel auch nicht auf ausdrücke, die immer unsigned sind.

    int a = -(3*sizeof(b));   // <-- das '-' will die regel nicht
    

    eigentlich doof, manchmal macht man sowas ja absichtlich.



  • maRKus23 schrieb:

    Aber aus welchem Grund sollte kein comma operator verwendet werden, find ich irgendwie unnötig, naja.

    wohl wegen der lesbarkeit des codes,

    int a = (1,2,3); // <-- müsste kompilieren, aber welchen wert hat dann 'a' ?
    


  • Der Wert von a wird dann wahrscheinlich 3 sein.
    Jap wird wohl wegen der Lesbarkeit sein. Was solls, werde diese unnötigen Regeln eh nicht in mein Pflichtenheft aufnehmen.



  • Michael E. schrieb:

    Der Komma-Operator trennt einfach nur Ausdrücke, z.B.

    for(int i = 0, j = 0;;);
    

    Das sind keine Ausdrücke, und das ist auch nicht der Komma-Operator. Lass das 'int' weg, dann stimmt es.

    maRKus23 schrieb:

    Der Wert von a wird dann wahrscheinlich 3 sein.

    Nicht nur wahrscheinlich. Der Komma-Operator wertet erst den linken und dann den rechten Teilausdruck aus. Das Ergebnis des Gesamtausdrucks ist das des rechten Teilausdrucks.

    Der Komma-Operator ist das C-Pendant zum Lisp-Operator PROGN. In einer von Grund auf imperativen Sprache ist er eigentlich nicht nötig (und auch gar nicht so mächtig wie er sein könnte), aber manchmal, z.B. in der Update-Anweisung im for-Schleifenkopf, ganz nützlich.


Anmelden zum Antworten