Beyond the Breaking News

C++ für eingebettete Systeme: constexpr und consteval

C++ Werkbank News

C++ für eingebettete Systeme: constexpr und consteval
C++23C/C++Developer

Aktuelle C++-Methoden helfen dabei, MAC-Adressen mit einem benutzerdefinierten Literal-Operator zur Compile‑Zeit zu prüfen und mit std::expected zu parsen.

Im heutigen Beitrag zeige ich, wie modernes C++ den Code für eingebettete Systeme beeinflussen kann. Der Code nutzt Features bis zu C++23 .Andreas Fertig ist erfahrener C++-Trainer und Berater, der weltweit Präsenz- sowie Remote-Kurse anbietet.

Er engagiert sich im C++-Standardisierungskomitee und spricht regelmäßig auf internationalen Konferenzen. Mit C++ Insights hat er ein international anerkanntes Tool entwickelt, das C++-Programmierenden hilft, C++ noch besser zu verstehen.Ich werde diese beiden Fragen beantworten, aber es nicht dabei belassen. Das unten stehende Beispiel aus der Praxis zeigt auch die neuesten Ergänzungen zu C++, die dazu beitragen, Code robuster und sicherer zu machen.Ich gebe viele Kurse für Kunden, die eingebettete Systeme entwickeln. Ich habe lange in diesem Bereich gearbeitet und es hat mir sehr viel Spaß gemacht. Ein immer wiederkehrendes Thema ist die Vernetzung. Obwohl es heutzutage verschiedene Netzwerktypen und -technologien gibt, wollen wir uns in diesem Beitrag mit dem Internetprotokoll beschäftigen. Die Basis der Netzwerkkommunikation ist die Netzwerkkarte . Jede NIC hat eine eindeutige Medium Control Address zugewiesen bekommen. Die MAC-Adresse ist die Basis für alles, was darauf aufbaut, wie TCP/IP.Eine MAC-Adresse besteht aus genau sechs Bytes. Eine Möglichkeit, eine MAC-Adresse in Code darzustellen, ist folgende:Die für Menschen lesbare Form der MAC-Adresse stellt diese sechs Bytes als Hexadezimalziffern dar, die zu zweit gruppiert und durch einen Doppelpunkt oder einen Bindestrich getrennt sind, wie hier:Als ersten Schritt schauen wir uns an, wie eine Funktion, die eine MAC-Adresse in Zeichenfolgenform konvertiert, in eine 6-Byte-Version umgewandelt werden kann. Oben istangefangen. Ich ersetze alle C-Arrays durch die stärkere C++-Version, wo es geht. Der große Vorteil ist, dass ich jederzeit die Größe abfragen kann. Für die Parsing-Funktion ist eine Zeichenfolge nur dann gültig, wenn sie mindestens 17 Zeichen enthält . Das Auffinden der Trennzeichen ist ein weiterer Punkt.constexpr std::expected // #A macFromString // #B { // #C if =c)) or // isalpha reduced ) or // isalpha reduced ) // is digit ); }; // #F if and isAllowedHexChar)) { return std::unexpected; } // #G if, addr.data + 2, val, 16).ec != std::errc) { return std::unexpected; } // #H addr=addr.subspan >=3) ? 3 : addr.size); ++i; } return res; } an. Dieser Typ ist seit C++23 verfügbar. Wie du siehst, ist der erste Template-Parameter der Datentyp, den du im besten Fall erwarten darfst ein und verwende dafür C++20 mit einem Initialisierer meiner Zählvariablenbefindet, wenn wir den letzten Teil nicht betrachten. Das ist dasselbe Verfahren wie oben in #C: Wenn kein Trennzeichen vorhanden ist , gebe ich in #Dstd::from_charsecstd::unexpected zurück. Für deinen Code ist es nützlich, verschiedene Fehlerwerte zu verwenden, um anzuzeigen, an welcher Stelle die Konvertierung fehlgeschlagen ist.-Funktionalität weiterzuschieben. Hier musst du vorsichtig sein: Wenn du den Bereich verlässt, ist das Verhalten undefiniert. Deshalb überprüfe ich, wie viele Elemente noch übrig sind, und gehe entweder um diese Anzahl weiter oder um die Anzahl, die noch übrig ist. Der letzte Teil gilt immer für das letzte Ziffernpaar, das ohne nachfolgendes Trennzeichen kommt.zur Kompilierungszeit aufrufen können. Hier kommt der anfangs erwähnte Literal-Operator zum Tragen. Eine interessante Eigenschaft des UDL-Operators ist, dass er nur mit Konstanten zur Kompilierungszeit aufgerufen werden kann. Du kannst den UDL-Operator manuell und damit mit Laufzeitwerten aufrufen, aber das widerspricht völlig dem Zweck eines Operators.// #A auto data{std::to_array}; auto m=macFromString; auto compileTimeMAC="12:34:56:78:90:AB"_macaddr;nimmt. Der Compiler erkennt freundlicherweise die Größe der Konstantenzeichenfolge zur Kompilierungszeit und teilt sie dem Operator mit. Damit sind alle Informationen zum Aufruf vonvorhanden. Das Beste daran ist, dass die Zeichenfolge und die Länge immer zu 100 % übereinstimmen, da wir absolut nichts damit zu tun haben. Gib einfach die Daten weiter und bilde beim Aufruf vonkeinen Wert enthält, löst der Datentyp eine Exception aus. Aber ist das nicht schlecht? In anderen Fällen vielleicht schon, aber hier finde ich es mehr als okay, ich finde es großartig!! Ich erzwinge, dass diese Funktion nur zur Kompilierungszeit ausgewertet wird. Bei einer ungültigen MAC-Adresszeichenfolge führt die Ausnahme zum Abbruch des Kompilierungsvorgangs. So kannst du solche Fehler effektiv während der Entwicklung abfangen. Keine fest codierte MAC-Adresse sollte ungültig sein, oder?wäre, beispielsweise wegen eines Throw oder anderen undefinierten Verhaltens, würde die Auswertung des UDL zu einem Laufzeitaufruf werden. Das ist sicher nicht das, was du willst.Die gezeigten Elemente helfen dir, deinen Code robuster zu machen und die Sicherheit sowie die Lesbarkeit zu verbessern. Die Anwendung der neuesten Funktionen von C++ ist in vielerlei Hinsicht vorteilhaft. Eine weitere Erkenntnis: Als Faustregel gilt, dass du jeden UDL-Operator in C++20 und höher alsLinks zu verschenkten Artikeln werden ungültig, wenn diese älter als 7 Tage sind oder zu oft aufgerufen wurden.

We have summarized this news so that you can read it quickly. If you are interested in the news, you can read the full text here. Read more:

heise_de /  🏆 20. in DE

C++23 C/C++ Developer IT

 

United States Latest News, United States Headlines

Similar News:You can also read news stories similar to this one that we have collected from other news sources.

Zusammenfassung: Der aktuelle Stand für die DTM-Saison 2026Zusammenfassung: Der aktuelle Stand für die DTM-Saison 2026SPEEDWEEK fasst euch den aktuellen Stand für die DTM-Saison 2026 zusammen. Wir blicken auf die bestätigten Fahrer und geben euch einen Überblick über die aktuellen Gerüchte in der DTM.
Read more »

Aktuelle Berichte und HintergründeAktuelle Berichte und HintergründeFriedrich Merz ist der zehnte deutsche Bundeskanzler und führt eine Regierungskoalition aus CDU/CSU und SPD.
Read more »

Aktuelle ThemenAktuelle ThemenAktuelle Berichte, News und Beiträge zu Themen aus Politik, Wirtschaft, Finanzen, Umwelt und Wissenschaft in Deutschland, Europa und der Welt bei deutschlandfunk.de
Read more »

Der Japanische Yen (JPY): Aktuelle Wechselkurse und historische EntwicklungenAnalyse des japanischen Yen (JPY) und seiner Bedeutung im globalen Devisenmarkt. Informationen zu aktuellen Wechselkursen, historischen Entwicklungen, dem Einfluss auf die japanische Wirtschaft und seine Rolle als sichere Anlage.
Read more »

Live-Ticker: Aktuelle Entwicklungen im Nahen Osten - Militärische Vorfälle, politische Reaktionen und SicherheitslageLive-Ticker: Aktuelle Entwicklungen im Nahen Osten - Militärische Vorfälle, politische Reaktionen und SicherheitslageEin Live-Ticker berichtet über die neuesten Ereignisse im Nahen Osten, einschließlich des Absturzes von US-Militärjets in Kuwait, der Entscheidung zur Nicht-Evakuierung deutscher Staatsbürger und eines abgewehrten Angriffs auf eine saudi-arabische Ölraffinerie.
Read more »

Supermärkte nutzen neue Methoden gegen Diebstahl an SB-KassenSupermärkte nutzen neue Methoden gegen Diebstahl an SB-KassenSelbstbedienungskassen sind bequem, aber auch anfällig für Diebstahl. Supermärkte reagieren nun mit neuen Kontrollmethoden wie 'Freezing' und KI-Analysen.
Read more »



Render Time: 2026-05-31 16:44:05