MISRA-C

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 dem if 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++ (entspricht i = i + 1) ausführt: Vor der Übergabe von i an die Funktion f (f wird i+1 übergeben) oder danach (f erhält i)?

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

  1. http://www.misra.org.uk/
  2. http://www.misra-cpp.org/
  3. Artikel und Beispiele von dSpace, abgerufen am 29. Oktober 2011. Abgerufen am 5. November 2011.
  4. http://www.misra-day.de/

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • MISRA — C ist ein C Programmierstandard aus der Automobilindustrie, der von der MISRA (Motor Industry Software Reliability Association) erarbeitet wurde. Die erste MISRA Standard für die Programmiersprache C MISRA C wurde ursprünglich 1998 definiert.… …   Deutsch Wikipedia

  • MISRA C — MISRA C  стандарт разработки программного обеспечения на языке Си, разработанный MISRA (Motor Industry Software Reliability Association). Цель стандарта  улучшить безопасность, переносимость и надежность программ для встраиваемых систем …   Википедия

  • MISRA C — is a software development standard for the C programming language developed by MISRA. Its aims are to facilitate code safety, portability and reliability in the context of embedded systems, specifically those systems programmed in ISO C. There is …   Wikipedia

  • MISRA C++ — is a software development standard for the C++ programming language developed by MISRA. Its aims are to facilitate reliability in the context of embedded systems, specifically those systems programmed in C++. There is also a set of guidelines… …   Wikipedia

  • Misra — or Mishra may refer to: Motor Industry Software Reliability Association MISRA C, a software development standard for the C programming language Misra (poetry), a term meaning line in Turkic, Arabic, Persian and Urdu poetry Mishra, Indian sur name …   Wikipedia

  • MISRA C — est une norme de programmation en langage C créée en 1998 par le Motor Industry Software Reliability Association (MISRA). Elle spécifie les règles de programmation pour plus de sûreté. L’objectif est d’éviter des erreurs d’exécution provoquées… …   Wikipédia en Français

  • mısra — is., ed., Ar. miṣrāˁ Dize Bir beyitte iki mısra bulunur …   Çağatay Osmanlı Sözlük

  • misra — is. <ər.> Şerin ayrılıqda götürülmüş bir sətri. Qəzəldən iki misra demək. Şerin misrası. – Xanqızı . . Vaqifin hər misrasından doğan atəşi göz yaşları ilə söndürməyə çalışırdı. Ç.. Aldığım mövzuya candan sarılıb; Misradan misraya atıldığım… …   Azərbaycan dilinin izahlı lüğəti

  • Misra Records — Misra Founded 1999 Founder Michael Bracy Timothy Bracy Paige Conner Totaro Distributor(s) ADA Genre …   Wikipedia

  • Misra Yantra — is one of the four distinct astronomical instruments of the Jantar Mantar observatory located in New Delhi, India.[1] Each instrument at the Jantar Mantar are separate brilliant architectures constructed based on mathematical observations, and… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”