MISRA C 2012 vs. MISRA C2 - Wie man umsteigt

Veröffentlicht Aug 17, 2021
von Secure Code Warrior
FALLSTUDIE

MISRA C 2012 vs. MISRA C2 - Wie man umsteigt

Veröffentlicht Aug 17, 2021
von Secure Code Warrior
Ressource anzeigen
Ressource anzeigen

Auf Secure Code Warrior sind wir stets bestrebt, unser Schulungsangebot zu erweitern. Um Entwicklern und Sicherheitsverantwortlichen die Möglichkeit zu geben, sichere eingebettete Systeme zu entwickeln, befassen wir uns mit der Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir über den MISRA C 2012-Standard sprechen und darüber, warum seine Einhaltung für die Entwicklung sicherer eingebetteter Systeme notwendig ist.

Beim Schreiben von Code in C ist es sehr einfach, Dinge zu implementieren, die scheinbar richtig aussehen, aber von Grund auf falsch sind. Ihr Code lässt sich vielleicht gut kompilieren und läuft sogar eine gewisse Zeit lang gut. Aber derselbe Code kann abstürzen oder ein undefiniertes Verhalten zeigen, wenn die Eingabegröße und/oder der Speicher wächst. So kann beispielsweise eine bestimmte Eingabezahl einen Überlauf einer Ganzzahl verursachen oder eine bestimmte Zeichenfolge ein Array aus dem Rahmen fallen lassen.

Hier kann der MISRA C-Codierungsstandard helfen. Die Regeln, Richtlinien und Best Practices des Standards ermöglichen es Entwicklern, sicheren und zuverlässigen C-Code für die Embedded-Entwicklung zu schreiben. 

MISRA C 2012, die neueste Version des Standards, fügt neue Regeln hinzu, verbessert die bestehenden und beseitigt einige Unstimmigkeiten. Wenn Sie noch eine ältere Version verwenden, wäre jetzt ein guter Zeitpunkt für einen Wechsel. 

Was ist der MISRA C-Codierungsstandard?

Der MISRA C-Standard enthält Richtlinien für Codesicherheit, Portabilität und Zuverlässigkeit für die Programmiersprache C. Der erste Satz von Richtlinien wurde 1998 veröffentlicht, der sich speziell auf die Sprache C bezog. 

Seitdem entwickelt das MISRA-Konsortium jedoch auch Codierungsstandards für C++. Jedes MISRA-C-Dokument enthält eine Reihe von Regeln, nicht konforme Beispiele und ausführliche Abschnitte über die Hintergrundinformationen, die zur Entwicklung dieser Regeln beigetragen haben.

C und C++ sind die am häufigsten verwendeten Sprachen für die Entwicklung eingebetteter Software. Einer der Hauptgründe dafür ist, dass sie schnell sind, da sie nur 1 oder 2 Abstraktionsebenen über der Maschinensprache haben. Das bedeutet aber auch, dass das Schreiben von sicherem Code, insbesondere in C, schwierig und fehleranfällig ist. In den meisten Hochsprachen wie Java und C# muss man sich zum Beispiel keine Gedanken über triviale Dinge wie Garbage Collection oder dynamische Typisierung machen. 

In C gibt es jedoch keine vordefinierte Möglichkeit, Speicherplatz zu sammeln, d. h. wenn Sie einen Speicherbereich für eine Datenstruktur zuweisen, müssen Sie ihn manuell freigeben, sobald Sie ihn nicht mehr benötigen. Wenn Sie das nicht tun, gibt C im Gegensatz zu anderen Sprachen den Speicher nicht frei, was zu einem Speicherleck führen würde.

MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Was hat sich geändert?

MISRA C: 2012, auch bekannt als C3, wurde erstmals im April 2013 veröffentlicht. Mit dem Wissen aus der Arbeit von Tausenden von Menschen und Organisationen fügt C3 neue Regeln hinzu, verbessert die Erläuterungen und Hintergründe einiger bestehender Regeln und schließt einige Schlupflöcher.

C3 unterstützt die C99-Version der Sprache, behält aber auch Regeln für die ältere ISO C90 bei. Das Hauptaugenmerk von C3 lag darauf, die üblichen Kosten für die Durchsetzung von Regeln zu senken und gleichzeitig die Verwendung der Sprache C in kritischen Systemen sicherer zu machen. Daher ist es ratsam, auf die neue Norm umzusteigen, falls Sie dies noch nicht getan haben.

Im Folgenden finden Sie eine Liste der wichtigsten Änderungen:

  • Behebung von Problemen, die in der Version von 2004 gefunden wurden.
  • Erhebliche Erhöhung der Anzahl der entscheidbaren Regeln. Eine Regel ist entscheidbar, wenn ein Analysewerkzeug dabei helfen kann, die Konformität mit ihr festzustellen.
  • Regeln werden als "erforderlich", "beratend" oder "verbindlich" eingestuft. Obligatorische Regeln dürfen unter keinen Umständen gebrochen werden. Erforderliche und beratende Regeln können in besonderen Fällen verletzt werden, sofern die Verletzung gerechtfertigt ist.
  • Es wurde eine Anleitung hinzugefügt, wie Regeln auf automatisch generierten Code anzuwenden sind. Dies ist sehr wichtig, da für von Menschen geschriebenen Code nicht immer dieselben Richtlinien gelten wie für den von einem Tool generierten Code.
  • Beseitigung der übermäßig verallgemeinerten Regeln, die ein vernünftiges Benutzerverhalten verbieten. Früher wurde z.B. empfohlen, überhaupt keine Makros zu verwenden, da sie zu verschiedenen Schwierigkeiten und Verwirrungen führen können (Makros können nicht debuggt werden, Makros haben keine Namespaces usw.). Dies verhinderte die Verwendung von Makros, selbst in Situationen, in denen sie eine elegante, sichere und bequeme Lösung darstellen könnten. In MISRA C: 2012 wurden neue Regeln für Makros eingeführt, die es ermöglichen, sie vorsichtig zu verwenden, wann immer dies möglich ist. Der folgende Auszug aus einem MISRA C-Dokument empfiehlt die Verwendung eines Makros anstelle einer Funktion.

MISRA C-Regeln in Aktion

Genug geredet, jetzt ist es an der Zeit, einige MISRA C-Regeln in die Praxis umzusetzen, mit Beispielen, wie sie angewendet werden.

Verwendung kompatibler Typen als Zeigerargumente für memcpy, memmove und memcmp

Die Standardbibliotheksfunktionen memcpy, memmove und memcmp führen byteweise Verschiebungen oder Vergleiche der angegebenen Anzahl von Bytes durch. Die Regel 21.15 des MISRA C 2012-Standards schreibt vor, dass die beiden Funktionsparameter Zeiger desselben Typs sein müssen. Ein Funktionsaufruf mit inkompatiblen Zeigertypen könnte auf einen Fehler hindeuten. 

Betrachten Sie die folgende Abbildung aus dem offiziellen MISRA-Konformitätsdokument. Die Regel ist erforderlich, entscheidbar und gilt sowohl für C90 als auch für C99.

Screenshot der MISRA C-Regel 21.15

Ein Beispiel folgt der Regelbeschreibung.

Screenshot einer nicht konformen Lösung.

Da die Objekte von unterschiedlichem Typ sind (uint8_t und uint16_t), ist dies eine nicht konforme Lösung, wie Sie sehen können.

Funktionen zur Behandlung von Zeichenketten, die keine Länge als Eingabe benötigen, dürfen nicht zu einem Out-of-Bound-Zugriff führen

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

Screenshot von MISRA C Regel 21.17.

Das entsprechende Beispiel lautet:

Screenshot eines korrekten Beispiels von Funktionen zur Behandlung von Zeichenketten

Wie Sie sehen können, kopiert strcpy in der Funktion f1 über die Länge der Zeichenkette hinaus, die nur 5 Zeichen enthalten kann. Wir haben auch eine konforme und sichere Verwendung von strcpy, bei der die Zeichenkette nur kopiert wird, wenn der Inhalt von "str" passt.

Extern empfangene Daten validieren

Dir 4.14 empfiehlt, die Gültigkeit der von "externen" Quellen empfangenen Daten zu überprüfen. Externer Input kann sein:

  • Lesen aus einer Datei.
  • Lesen aus einer Umgebungsvariablen.
  • Jede Benutzereingabe.
  • Alles, was über einen Kommunikationskanal empfangen wird. Z. B. über eine TCP-Verbindung oder HTTP-API usw.

Diese Richtlinie fällt in die Kategorie " erforderlich" und gilt sowohl für C90 als auch für C99. Der Grund dafür ist, dass ein Programm keine Kontrolle über die von externen Quellen empfangenen Daten hat, was bedeutet, dass diese Daten ungültig oder bösartig sein können. Ein Programm erwartet z. B., dass der Benutzer eine Zahl eingibt, aber der Benutzer gibt eine Zeichenkette ein. Bevor das Programm die Eingabe verarbeitet, muss es überprüfen, ob es sich tatsächlich um eine Zahl handelt.

Die Gültigkeit der aus externen Quellen erhaltenen Werte ist zu überprüfen

Wie man zu MISRA C 2012 wechselt

Die Umstellung auf MISRA C 2012 erfordert eine Aktualisierung Ihres Kodierrichtlinien-Dokuments. Wenn Sie kein solches Dokument verwenden und sich stattdessen auf ein statisches Analysetool verlassen (was die empfohlene Wahl ist), müssen Sie sich möglicherweise eine neuere Version des Tools besorgen. Hier sind drei Tools, die die Einhaltung von MISRA C 2012 überprüfen:

  1. Cppcheck ist ein Open-Source-Tool, das auf MISRA-Regeln prüfen und auch verschiedene Arten von Fehlern aufspüren kann.
  2. PC-lint Plus ist ein kostenpflichtiges Tool, das eine 30-tägige Testphase beinhaltet. Es prüft nicht nur die Einhaltung von MISRA C, sondern kann auch dabei helfen, potenzielle Bugs und Schwachstellen zu erkennen.
  3. CodeSonar ist ein weiteres Tool, das sowohl die MISRA C- als auch die C++-Konformität überprüft.

Es gibt auch einige Compiler, die auf die Einhaltung von MISRA testen können. Falls eine Regelverletzung festgestellt wird, werden entsprechende Warnungen oder Ausnahmen ausgegeben. Green Hills Software bietet z. B. Compiler mit Unterstützung für alle MISRA-Standards, sowohl für 32-Bit- als auch für 64-Bit-Architekturen.

Verwendung von Secure Code Warrior für die Weiterbildung von Entwicklern in MISRA C

Das Vorzeigeprodukt vonSecure Code Warrior- learning platform - bietet zahlreiche interaktive Herausforderungen, courses, und Bewertungen, die Entwicklern helfen können, sicheren C/C++-Code zu schreiben. Der Inhalt der Plattform ist rahmenspezifisch und sehr ansprechend. Unsere C/C++:Embed-Codieraufgaben wurden sowohl von MISRA C, AUTOSAR C++ (MISRA C++) als auch von IEC inspiriert.

Entwickler können sich auf eine persönliche Lernreise begeben, auf der sie C/C++-spezifische Schwachstellen erkennen und - was noch wichtiger ist - lernen, diese Fehler zu beheben. In diesem Prozess können die Entwickler ihre Fortschritte verfolgen, um ihre Schwachstellen zu erkennen, und sogar einen freundschaftlichen Programmierwettbewerb mit Gleichgesinnten austragen. Erfahren Sie mehr darüber, wie wir die Automobil- und Transportbranche mit unseren Lösungen unterstützen.

Möchten Sie herausfinden, wie interaktiv und einbettungsorientiert unsere Challenges sind? Probieren Sie noch heute einige C/C++:Embed-Herausforderungen auf learning platform aus!

Ressource anzeigen
Ressource anzeigen

Autor

Secure Code Warrior

Secure Code Warrior baut eine Kultur von sicherheitsorientierten Entwicklern auf, indem es ihnen die Fähigkeiten vermittelt, sicher zu programmieren. Unser Flaggschiff Agile Learning Platform bietet relevante fähigkeitsbasierte Pfade, praktische Übungen missions und kontextbezogene Tools, mit denen Entwickler ihre Fähigkeiten zum Schreiben von sicherem Code schnell erlernen, aufbauen und anwenden können.

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

MISRA C 2012 vs. MISRA C2 - Wie man umsteigt

Veröffentlicht Aug 17, 2021
Unter Secure Code Warrior

Auf Secure Code Warrior sind wir stets bestrebt, unser Schulungsangebot zu erweitern. Um Entwicklern und Sicherheitsverantwortlichen die Möglichkeit zu geben, sichere eingebettete Systeme zu entwickeln, befassen wir uns mit der Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir über den MISRA C 2012-Standard sprechen und darüber, warum seine Einhaltung für die Entwicklung sicherer eingebetteter Systeme notwendig ist.

Beim Schreiben von Code in C ist es sehr einfach, Dinge zu implementieren, die scheinbar richtig aussehen, aber von Grund auf falsch sind. Ihr Code lässt sich vielleicht gut kompilieren und läuft sogar eine gewisse Zeit lang gut. Aber derselbe Code kann abstürzen oder ein undefiniertes Verhalten zeigen, wenn die Eingabegröße und/oder der Speicher wächst. So kann beispielsweise eine bestimmte Eingabezahl einen Überlauf einer Ganzzahl verursachen oder eine bestimmte Zeichenfolge ein Array aus dem Rahmen fallen lassen.

Hier kann der MISRA C-Codierungsstandard helfen. Die Regeln, Richtlinien und Best Practices des Standards ermöglichen es Entwicklern, sicheren und zuverlässigen C-Code für die Embedded-Entwicklung zu schreiben. 

MISRA C 2012, die neueste Version des Standards, fügt neue Regeln hinzu, verbessert die bestehenden und beseitigt einige Unstimmigkeiten. Wenn Sie noch eine ältere Version verwenden, wäre jetzt ein guter Zeitpunkt für einen Wechsel. 

Was ist der MISRA C-Codierungsstandard?

Der MISRA C-Standard enthält Richtlinien für Codesicherheit, Portabilität und Zuverlässigkeit für die Programmiersprache C. Der erste Satz von Richtlinien wurde 1998 veröffentlicht, der sich speziell auf die Sprache C bezog. 

Seitdem entwickelt das MISRA-Konsortium jedoch auch Codierungsstandards für C++. Jedes MISRA-C-Dokument enthält eine Reihe von Regeln, nicht konforme Beispiele und ausführliche Abschnitte über die Hintergrundinformationen, die zur Entwicklung dieser Regeln beigetragen haben.

C und C++ sind die am häufigsten verwendeten Sprachen für die Entwicklung eingebetteter Software. Einer der Hauptgründe dafür ist, dass sie schnell sind, da sie nur 1 oder 2 Abstraktionsebenen über der Maschinensprache haben. Das bedeutet aber auch, dass das Schreiben von sicherem Code, insbesondere in C, schwierig und fehleranfällig ist. In den meisten Hochsprachen wie Java und C# muss man sich zum Beispiel keine Gedanken über triviale Dinge wie Garbage Collection oder dynamische Typisierung machen. 

In C gibt es jedoch keine vordefinierte Möglichkeit, Speicherplatz zu sammeln, d. h. wenn Sie einen Speicherbereich für eine Datenstruktur zuweisen, müssen Sie ihn manuell freigeben, sobald Sie ihn nicht mehr benötigen. Wenn Sie das nicht tun, gibt C im Gegensatz zu anderen Sprachen den Speicher nicht frei, was zu einem Speicherleck führen würde.

MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Was hat sich geändert?

MISRA C: 2012, auch bekannt als C3, wurde erstmals im April 2013 veröffentlicht. Mit dem Wissen aus der Arbeit von Tausenden von Menschen und Organisationen fügt C3 neue Regeln hinzu, verbessert die Erläuterungen und Hintergründe einiger bestehender Regeln und schließt einige Schlupflöcher.

C3 unterstützt die C99-Version der Sprache, behält aber auch Regeln für die ältere ISO C90 bei. Das Hauptaugenmerk von C3 lag darauf, die üblichen Kosten für die Durchsetzung von Regeln zu senken und gleichzeitig die Verwendung der Sprache C in kritischen Systemen sicherer zu machen. Daher ist es ratsam, auf die neue Norm umzusteigen, falls Sie dies noch nicht getan haben.

Im Folgenden finden Sie eine Liste der wichtigsten Änderungen:

  • Behebung von Problemen, die in der Version von 2004 gefunden wurden.
  • Erhebliche Erhöhung der Anzahl der entscheidbaren Regeln. Eine Regel ist entscheidbar, wenn ein Analysewerkzeug dabei helfen kann, die Konformität mit ihr festzustellen.
  • Regeln werden als "erforderlich", "beratend" oder "verbindlich" eingestuft. Obligatorische Regeln dürfen unter keinen Umständen gebrochen werden. Erforderliche und beratende Regeln können in besonderen Fällen verletzt werden, sofern die Verletzung gerechtfertigt ist.
  • Es wurde eine Anleitung hinzugefügt, wie Regeln auf automatisch generierten Code anzuwenden sind. Dies ist sehr wichtig, da für von Menschen geschriebenen Code nicht immer dieselben Richtlinien gelten wie für den von einem Tool generierten Code.
  • Beseitigung der übermäßig verallgemeinerten Regeln, die ein vernünftiges Benutzerverhalten verbieten. Früher wurde z.B. empfohlen, überhaupt keine Makros zu verwenden, da sie zu verschiedenen Schwierigkeiten und Verwirrungen führen können (Makros können nicht debuggt werden, Makros haben keine Namespaces usw.). Dies verhinderte die Verwendung von Makros, selbst in Situationen, in denen sie eine elegante, sichere und bequeme Lösung darstellen könnten. In MISRA C: 2012 wurden neue Regeln für Makros eingeführt, die es ermöglichen, sie vorsichtig zu verwenden, wann immer dies möglich ist. Der folgende Auszug aus einem MISRA C-Dokument empfiehlt die Verwendung eines Makros anstelle einer Funktion.

MISRA C-Regeln in Aktion

Genug geredet, jetzt ist es an der Zeit, einige MISRA C-Regeln in die Praxis umzusetzen, mit Beispielen, wie sie angewendet werden.

Verwendung kompatibler Typen als Zeigerargumente für memcpy, memmove und memcmp

Die Standardbibliotheksfunktionen memcpy, memmove und memcmp führen byteweise Verschiebungen oder Vergleiche der angegebenen Anzahl von Bytes durch. Die Regel 21.15 des MISRA C 2012-Standards schreibt vor, dass die beiden Funktionsparameter Zeiger desselben Typs sein müssen. Ein Funktionsaufruf mit inkompatiblen Zeigertypen könnte auf einen Fehler hindeuten. 

Betrachten Sie die folgende Abbildung aus dem offiziellen MISRA-Konformitätsdokument. Die Regel ist erforderlich, entscheidbar und gilt sowohl für C90 als auch für C99.

Screenshot der MISRA C-Regel 21.15

Ein Beispiel folgt der Regelbeschreibung.

Screenshot einer nicht konformen Lösung.

Da die Objekte von unterschiedlichem Typ sind (uint8_t und uint16_t), ist dies eine nicht konforme Lösung, wie Sie sehen können.

Funktionen zur Behandlung von Zeichenketten, die keine Länge als Eingabe benötigen, dürfen nicht zu einem Out-of-Bound-Zugriff führen

String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

Screenshot von MISRA C Regel 21.17.

Das entsprechende Beispiel lautet:

Screenshot eines korrekten Beispiels von Funktionen zur Behandlung von Zeichenketten

Wie Sie sehen können, kopiert strcpy in der Funktion f1 über die Länge der Zeichenkette hinaus, die nur 5 Zeichen enthalten kann. Wir haben auch eine konforme und sichere Verwendung von strcpy, bei der die Zeichenkette nur kopiert wird, wenn der Inhalt von "str" passt.

Extern empfangene Daten validieren

Dir 4.14 empfiehlt, die Gültigkeit der von "externen" Quellen empfangenen Daten zu überprüfen. Externer Input kann sein:

  • Lesen aus einer Datei.
  • Lesen aus einer Umgebungsvariablen.
  • Jede Benutzereingabe.
  • Alles, was über einen Kommunikationskanal empfangen wird. Z. B. über eine TCP-Verbindung oder HTTP-API usw.

Diese Richtlinie fällt in die Kategorie " erforderlich" und gilt sowohl für C90 als auch für C99. Der Grund dafür ist, dass ein Programm keine Kontrolle über die von externen Quellen empfangenen Daten hat, was bedeutet, dass diese Daten ungültig oder bösartig sein können. Ein Programm erwartet z. B., dass der Benutzer eine Zahl eingibt, aber der Benutzer gibt eine Zeichenkette ein. Bevor das Programm die Eingabe verarbeitet, muss es überprüfen, ob es sich tatsächlich um eine Zahl handelt.

Die Gültigkeit der aus externen Quellen erhaltenen Werte ist zu überprüfen

Wie man zu MISRA C 2012 wechselt

Die Umstellung auf MISRA C 2012 erfordert eine Aktualisierung Ihres Kodierrichtlinien-Dokuments. Wenn Sie kein solches Dokument verwenden und sich stattdessen auf ein statisches Analysetool verlassen (was die empfohlene Wahl ist), müssen Sie sich möglicherweise eine neuere Version des Tools besorgen. Hier sind drei Tools, die die Einhaltung von MISRA C 2012 überprüfen:

  1. Cppcheck ist ein Open-Source-Tool, das auf MISRA-Regeln prüfen und auch verschiedene Arten von Fehlern aufspüren kann.
  2. PC-lint Plus ist ein kostenpflichtiges Tool, das eine 30-tägige Testphase beinhaltet. Es prüft nicht nur die Einhaltung von MISRA C, sondern kann auch dabei helfen, potenzielle Bugs und Schwachstellen zu erkennen.
  3. CodeSonar ist ein weiteres Tool, das sowohl die MISRA C- als auch die C++-Konformität überprüft.

Es gibt auch einige Compiler, die auf die Einhaltung von MISRA testen können. Falls eine Regelverletzung festgestellt wird, werden entsprechende Warnungen oder Ausnahmen ausgegeben. Green Hills Software bietet z. B. Compiler mit Unterstützung für alle MISRA-Standards, sowohl für 32-Bit- als auch für 64-Bit-Architekturen.

Verwendung von Secure Code Warrior für die Weiterbildung von Entwicklern in MISRA C

Das Vorzeigeprodukt vonSecure Code Warrior- learning platform - bietet zahlreiche interaktive Herausforderungen, courses, und Bewertungen, die Entwicklern helfen können, sicheren C/C++-Code zu schreiben. Der Inhalt der Plattform ist rahmenspezifisch und sehr ansprechend. Unsere C/C++:Embed-Codieraufgaben wurden sowohl von MISRA C, AUTOSAR C++ (MISRA C++) als auch von IEC inspiriert.

Entwickler können sich auf eine persönliche Lernreise begeben, auf der sie C/C++-spezifische Schwachstellen erkennen und - was noch wichtiger ist - lernen, diese Fehler zu beheben. In diesem Prozess können die Entwickler ihre Fortschritte verfolgen, um ihre Schwachstellen zu erkennen, und sogar einen freundschaftlichen Programmierwettbewerb mit Gleichgesinnten austragen. Erfahren Sie mehr darüber, wie wir die Automobil- und Transportbranche mit unseren Lösungen unterstützen.

Möchten Sie herausfinden, wie interaktiv und einbettungsorientiert unsere Challenges sind? Probieren Sie noch heute einige C/C++:Embed-Herausforderungen auf learning platform aus!

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Senden
Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.