Viele Embedded-Projekte arbeiten noch mit älteren (und veralteten) Umgebungen, die den Entwicklern nicht die Möglichkeit bieten, einen neuen C++ Standard zu nutzen. Das ist ein Versäumnis. Denn damit fehlen den Programmierern nicht nur die neu hinzugefügten Features – in C++11 wurden einige Dinge grundlegend verbessert.
Seit der Version 11 bewegt sich wieder etwas im Hause C++. Wurde lange Zeit die Weiterentwicklung des Standards von Embedded-Entwicklern kaum wahrgenommen, hat die Version 11 von C++ der Programmiersprache wieder Schwung und eine Reihe an neuen Funktionen verliehen, die es wert sind, dass man sie sich näher anschaut.
Ein Beispiel, das oft zur Anwendung kommt, ist der neue Null-Pointer – nullptr.
Beispiel:
void doSomething(char * pc) { cout << "char*" << endl; } void doSomething(int i) { cout << "int" << endl; }
Alter Code:
void testNullPtr(void) { doSomething(NULL); doSomething(0); }
Beide Aufrufe landen bei doSomething(int i) und das, obwohl in der ersten Variante scheinbar ein Pointer übergeben wurde. Die impliziten Typanpassungen sorgen für eine Umwandlung in einen Integer.
Für den richtigen Aufruf ist ein Cast nötig:
void testNullPtr(void) { doSomething(static_cast<char*>(NULL)); doSomething(0); }
Anders ist es in C++ ab der Version 11:
void testNullPtr(void) { doSomething(nullptr); doSomething(0); }
Durch den „echten“ Null-Pointer weiß der Compiler nun, was er zu tun hat.
An anderen Stellen wurde mehr Wert auf eine sichere Programmierung gelegt. Zu erwähnen sind die typsicheren Aufzählungen (enum) und die neuen Smart-Pointer. Die Einführung der RValue-Referenzen erleichtert den Umgang mit temporären Objekten.
Viele kleine Verbesserungen erleichtern den Entwickleralltag
Dazu gehören die automatische for-Schleife (in anderen Programmiersprachen foreach-Schleife genannt) wie auch die automatische Typerkennung von Variablen. Diese wurde in der Version 14 noch einmal verbessert (vor allem im Zusammenhang mit Templates). Falls man heute noch einen alten Compiler nutzt, ist das übrigens ist ein guter Grund, die Version 11 zu überspringen und gleich auf C++14 zu gehen.
Eine weitere erwähnenswerte Neuerung sind die Lambda-Funktionen, die flexibel und anonym arbeiten. Mit ihnen kann man kleine Aufgaben direkt vor Ort erledigen, ohne gleich eine weitere Funktion schreiben zu müssen. Sie sind darüber hinaus sehr nützlich, wenn es bei Funktionsaufrufen um Anpassungen bei den Übergabeparametern geht.
Neben der Erweiterung der Sprache wurde auch die Standardbibliothek verbessert und ausgebaut. Dort gibt es unter anderem jetzt erstmalig Klassen für das Multithreading.
Auch wenn viele Neuerungen der Sprache C++ für viele Embedded-Projekte nur eingeschränkt einsetzbar sind, bringen die neueren C++ Versionen so viele Verbesserungen und Vereinfachungen in den Entwicklungsalltag, dass sich ein Umstieg lohnt.
Bleiben Sie am Ball – mit den MicroConsult Trainings rund um C++ und C++11 !