MISRA
-
volkard schrieb:
Aber statt MISRA zu benutzen, ist es unter Umständen besser, nach C++ aufzusteigen und MISRA dort nicht zu benutzen.
c++ fehlerquellen werden von MISRA-C doch garnicht abgedeckt. wenn mich nicht alles täuscht, gibt es übrigens auch misra-regeln für c++. das sind bestimmt viele-viele mehr.
btw, c++ und aufsteigen ist ein widerspruch.
-
Bevor irgendwas falsches über MISRA geschrieben wird:
MISRA ist letztendlich eine Ansammlung von Programmierer-Regeln.
Für jemanden der noch nie mit MISRA zu tun hatte, ist das erstmal eine hohe Hürde.
Unter anderem verbietet MISRA einen frei berechenbaren Pointer zu verwenden.Meistens kommt MISRA in der Automobil-, Luftfahrt- und in der Medizintechnik zur Anwendung.
Salopp ausgedrückt, soll MISRA dafür sorgen, daß die Anforderungen von Auftraggeber und die Interpretation durch Programmierer (oder Software-Firma, ... ) eine einheitliche Grundlage haben, eben dieses MISRA.
Diese Grundlage hat ein vorrangiges Ziel: Soliden Code zu erzeugen. Und dadurch (normalerweise) zuverlässigere Produkte.Des weiteren ist es nicht unbedingt notwendig alle MISRA-Regeln einzuhalten. Denn der Auftraggeber und Programmierer können in ihrem Pflichtenheft vereinbaren, daß einige bestimmte MISRA-Regeln außer acht gelassen werden kann.
Und: MISRA ist nicht an eine bestimmte Programmiersprache wie C, C++ oder Delphi (Pascal) gebunden!
Martin
P.S.: Zum Vergleich: Wir wissen (hoffentlich) alle, warum es die VDE-Normen gibt? Eine Firma die elektrische Produkte in Deutschland inverkehrbringt, muß die geltenden VDE-Normen beachten, welche auf ihr Produkt zutreffen. Ohne diese Normen wären wir Normalverbraucher im Alltag von massig Schrott oder lebensgefährlichen Gegenständen umgeben.
-
Mmacher: gut erklärt *daumen_hoch*
aber gibts wirklich auch misra-regeln für pascal?
-
Mmacher schrieb:
Salopp ausgedrückt, soll MISRA dafür sorgen, daß die Anforderungen von Auftraggeber und die Interpretation durch Programmierer (oder Software-Firma, ... ) eine einheitliche Grundlage haben, eben dieses MISRA.
Diese Grundlage hat ein vorrangiges Ziel: Soliden Code zu erzeugen. Und dadurch (normalerweise) zuverlässigere Produkte.Ja, die Ziele sind hoch.
Des weiteren ist es nicht unbedingt notwendig alle MISRA-Regeln einzuhalten. Denn der Auftraggeber und Programmierer können in ihrem Pflichtenheft vereinbaren, daß einige bestimmte MISRA-Regeln außer acht gelassen werden kann.
Ich kann mir nicht vorstellen, daß die richtigen ausgelassen werden.
Und: MISRA ist nicht an eine bestimmte Programmiersprache wie C, C++ oder Delphi (Pascal) gebunden!
Nee, dazu gibt es ja Sachen wie MISRA-C.
continue und break sollen nicht benutzt werden.
der wert einer void-funktion darf nicht benutzt werden.
single exit.
NULL darf nicht dereferenziert werden.P.S.: Zum Vergleich: Wir wissen (hoffentlich) alle, warum es die VDE-Normen gibt? Eine Firma die elektrische Produkte in Deutschland inverkehrbringt, muß die geltenden VDE-Normen beachten, welche auf ihr Produkt zutreffen. Ohne diese Normen wären wir Normalverbraucher im Alltag von massig Schrott oder lebensgefährlichen Gegenständen umgeben.
Schlechter Vergleich.
-
volkard schrieb:
der wert einer void-funktion darf nicht benutzt werden.
das geht sowieso nicht.
-
das geht sowieso nicht.
God save the GNU
http://www.c-plusplus.net/forum/viewtopic-var-t-is-252358.html
-
mngbd schrieb:
das geht sowieso nicht.
God save the GNU
http://www.c-plusplus.net/forum/viewtopic-var-t-is-252358.htmlhihi, also gibts auch misra-regeln für verbuggte compiler.
habt ihr mal versucht, den 'output' der void-funktion zu benutzen? spätestens dabei sollte der compiler streiken.
btw, ich kann in dem forum garnicht schreiben. erhard hat wohl angst vor spam und trollerei.
-
hihi, also gibts auch misra-regeln für verbuggte compiler.
Die halten das für ein -- ich sag's besser nicht.
habt ihr mal versucht, den 'output' der void-funktion zu benutzen? spätestens dabei sollte der compiler streiken.
So ist es:
void f() { return 17; } int main(int ac, char **av) { int i = f(); return 0; }
$ gcc main.c main.c: In Funktion »f«: main.c:1: Warnung: »return« mit Wert in void zurückgebender Funktion main.c: In Funktion »main«: main.c:5: Fehler: void-Wert nicht ignoriert wie es sein sollte
Aber wenn man es nicht verwendet, kommt nur die Warnung.
btw, ich kann in dem forum garnicht schreiben. erhard hat wohl angst vor spam und trollerei.
Könnte ich eigentlich mal fragen.
-
mngbd schrieb:
main.c:5: Fehler: void-Wert nicht ignoriert wie es sein sollte[/code]
naja, das sollte doch reichen, um diese misra-regel für quatsch zu erklären (ausser man hatte dabei wirklich kaputte compiler im sinn).
-
;fricky schrieb:
naja, das sollte doch reichen, um diese misra-regel für quatsch zu erklären (ausser man hatte dabei wirklich kaputte compiler im sinn).
Da hast du eigentlich recht. Trotzdem haben wir erst heute über ein "Real-Word"-Problem gelesen, das durch eine Misra-Regel verhindert werden könnte. Seltsam, das ganze.
-
µngbd schrieb:
;fricky schrieb:
naja, das sollte doch reichen, um diese misra-regel für quatsch zu erklären (ausser man hatte dabei wirklich kaputte compiler im sinn).
Da hast du eigentlich recht. Trotzdem haben wir erst heute über ein "Real-Word"-Problem gelesen, das durch eine Misra-Regel verhindert werden könnte. Seltsam, das ganze.
Gar nicht wahr. Da war's wohl zu spät für mich, um gerade zu denken.