- MISRA-C
-
MISRA-C ist ein C-Programmierstandard aus der Automobilindustrie, der von der MISRA (Motor Industry Software Reliability Association) erarbeitet wurde. Der erste MISRA-Standard für die Programmiersprache C "MISRA C" wurde ursprünglich 1998 definiert. Inzwischen gibt es über 7000 Kopien der Standardisierung weltweit.[1]
Der erste Standard (MISRA C:1998) umfasste 127 regeln, davon 93 als required (erforderlich, zwingend) und 34 als advisory (empfohlen), die Ausgabe MISRA C:2004 umfasste 144 Regeln, davon 112 required, 29 advisory und 3 deprecated (veraltet, abgelehnt).
Ziel der MISRA-Regeln ist es, Programme sicher zu erstellen, so dass sie auch in sicherheitskritischen Anwendungen zuverlässig laufen. Dazu gibt MISRA C vor allem Empfehlungen zu Konstrukten, die im C-Standard unklar spezifiziert sind, so dass der Hersteller des Compilers eine eigene Interpretation wählen muss, die von Compiler zu Compiler unterschiedlich sein kann und möglicherweise dazu führt, dass der gleiche Quellcode auf unterschiedlichen Compilern zu unterschiedlichen Programmen führt. MISRA-C enthält ebenfalls Regeln, welche die Lesbarkeit des Codes verbessern und typische Fehler vermeiden sollen.
Inhaltsverzeichnis
Beispiele
Kommentare können in C sowohl mit
//
eingeleitet werden (Kommentar endet stets am Zeilenende) oder mit/*
und in einer beliebigen anderen Zeile mit*/
Wenn der Programmierer einen längeren Block, der z.B. so aussieht// i um 1 erhöhen i++ /* Wenn Zähler i gleich a ist, rufe MeineFunktion auf und erhöhe i um 1 */ if (i==a) { meineFunktion(a) }
Will ein Programmierer diesen Abschnitt durch
/*
und*/
deaktivieren, so kommt es auf den Compiler an, ob er bei Kommentaren die/*
wie Klammern mitzählt oder ob er nach dem ersten*/
wieder Code erkennt und kompiliert:/* Code testweise deaktivieren // i um 1 erhöhen i++ /* Wenn Zähler i gleich a ist, rufe MeineFunktion auf um einen hoch */ if (i==a) { meineFunktion(a) } */
(Die hier verwendete Wiki-Vorlage ist übrigens ein gutes Beispiel, auch sie erkennt Kommentare in C und sie hält den Kommentar nach dem ersten
*/
für beendet, weshalb der folgende Text nicht mehr kursiv erscheint.)Wenn der Compiler das erste
*/
als Ende des Kommentars versteht, dann wird die Zeile mit demif
kompiliert und später auch ausgeführt. Aus diesem Grunde sollte nur mit//
und nicht mit/*...*/
gearbeitet werden.Beim folgenden Beispiel kommt es auf den Compiler an, wann er
i++
(entsprichti = i + 1)
ausführt: Vor der Übergabe voni
an die Funktionf
(f
wirdi+1
übergeben) oder danach (f
erhälti
)?a = fnktn(x, i++)
Weiteres Beispiel mit unklarer Syntax, die durch den Programmierer verursacht wird. Diese Variante ist schlecht, weil man nicht nachvollziehen kann, ob der Programmierer einen Fehler gemacht hat oder absichtlich dieses Konstrukt gewählt hat:
if ( i = a ) { /* Anweisung */ }
Der Compiler würde diese Variante erkennen und übersetzen
/* Zuweisung */ i = a; /* dann ein Vergleich */ if ( i != 0 ) { /* Anweisung */ }
Möglicherweise meinte Programmierer == und hat versehentlich = geschrieben, so dass Anweisung nur bei Gleichheit von i und a ausgeführt werden soll:
if ( i == a ) { /* Anweisung */ }
MISRA-C wird kontinuierlich gepflegt und an neue Erfordernisse angepasst. Die aktuelle Version ist MISRA-C: 2004 (MISRA C Version 2). Seit 2008 gibt es eine neue Untermenge ("subset") des MISRA-Standards für C++, die als MISRA-C++: 2008 bezeichnet wird und eine überarbeitete Version für MISRA C ist für 2011 angekündigt.[2] Bei der Programmierung von eingebetten Systemen im automobilen Umfeld ist MISRA-C-konformer Code üblicherweise vorgeschrieben. Zur Überprüfung werden Werkzeuge zur statischen Code-Analyse wie QA-C/MISRA oder Lint verwendet.
Ein Hersteller für Werkzeuge zur automatischen Codegenerierung verweist darauf, dass einige Regeln von MISRA-C zu Performanceeinbußen führen.[3]
Themen rund um MISRA werden alle zwei bis vier Jahre auf dem sogenannten "MISRA Day", der traditionell in Stuttgart stattfindet, dem interessierten Anwender aus Deutschland nähergebracht.[4].
Literatur
- MISRA: MISRA-C:2004 - Guidelines for the use of the C language in critical systems, ISBN 0952415623 (PDF: 095241564X)
- Johannes Heuft: Der Weg zurück zur Software-Produktivität, 2007, ISBN 978-3-937446-88-2 (Kapitel 5.2.4, S. 37-41: Kritik an MISRA-C und den anwendenden Qualitätssicherern)
Einzelnachweise
- ↑ http://www.misra.org.uk/
- ↑ http://www.misra-cpp.org/
- ↑ Artikel und Beispiele von dSpace, abgerufen am 29. Oktober 2011. Abgerufen am 5. November 2011.
- ↑ http://www.misra-day.de/
Weblinks
Wikimedia Foundation.