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 MinusoperatorDer 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 nichteigentlich 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.