Künstliche Intelligenz
c’t 3003: Meine Linux-Probleme als Anfänger
Linux ist schnell, kostenlos, Open Source, aber manchmal leider auch verwirrend — zumindest am Anfang. c’t 3003 zeigt, wie sich erste Einstiegshürden überwinden lassen.
Weiterlesen nach der Anzeige
Transkript des Videos
(Hinweis: Dieses Transkript ist für Menschen gedacht, die das Video oben nicht schauen können oder wollen. Der Text gibt nicht alle Informationen der Bildspur wieder.)
Guck mal hier, das bin ich, wie die Stimmen in meinem Kopf immer lauter werden und sagen: „Benutz Linux, Linux ist geil, Linux nervt mich mit Werbung.“ Ok, geil, aber welche der unendlich vielen Linux-Varianten soll ich denn jetzt überhaupt nehmen? Und hä, wie installiere ich jetzt hier überhaupt Programme? Mit der Kommandozeile? Muss man das unbedingt?
Also Linux ist halt auch einfach anders als Windows oder macOS und das kann beim Umstieg eine echte Mauer sein, über die man erstmal kraxeln muss. In diesem Video zeige ich euch als absoluter Linux-Anfänger mal kurz und knapp, was die für mich größten Hürden beim Umstieg auf Linux waren und wie ich die dann überwunden habe. Denn so schlimm ist das alles gar nicht und vor allem macht Linux auch richtig viel Spaß. Und sicher und kostenlos und so weiter und so fort. Ihr checkt, bleibt dran.
Liebe Hackerinnen, liebe Internet-Surfer, herzlich willkommen hier bei…
Auch wenn wir und viele von euch Linux feiern, statistisch gesehen benutzen es nur extrem wenig Menschen. Zumindest am privaten Desktop. Und woran das liegt, ja, das kann mehrere Gründe haben. Allen voran werden beispielsweise Consumer-Laptops so gut wie immer mit vorinstalliertem Windows ausgeliefert. Und MacBooks ja sowieso mit macOS. Und die, ich sag mal, Otto-Normal-Menschen denken da auch gar nicht weiter drüber nach und sind einfach okay damit.
Da ihr aber auf dieses Video geklickt habt, ist die Chance hoch, dass ihr euch wahrscheinlich intensiver mit Computern beschäftigt und vielleicht auch beispielsweise von Windows genervt seid. Und ich weiß nicht, wie es euch geht, aber ich hab auf jeden Fall schon länger dieses Flüstern im Ohr, was mir sagt, dass ich Linux benutzen soll. Und das wird halt irgendwie immer lauter.
Weiterlesen nach der Anzeige
Denn Linux hat super viele Vorteile. Es ist kostenlos und komplett Open Source. Man hat die Kontrolle über seine eigenen Daten und muss sich nicht von zum Beispiel Microsoft abschnorcheln lassen. Es ist ressourcenschonend und läuft auf älterer Hardware noch schön schnell. Und wenn man will, kann man das ganze System so umbasteln, wie es einem gefällt. Auch optisch. Da hatten wir ja neulich schon mal ein Video drüber gemacht. Gerne mal abchecken. Und Keno findet zum Beispiel, dass kein Betriebssystem so gut aussieht wie Linux mit GNOME. Was GNOME ist, erkläre ich später noch.
Okay, okay. Aber Vorteile hin oder her: Man kann es nicht anders sagen. Wenn man von Windows oder macOS kommt, ist der Umstieg auf Linux erstmal gewöhnungsbedürftig. Und mir sind dabei so ganz allgemeine Sachen aufgefallen, die jetzt nicht unbedingt was mit einer Distribution zu tun haben.
Also hier kommen jetzt die Sachen, die mich als kompletter Linux-Noob beim Umstieg wirklich am meisten verwirrt haben. Und ganz kurz als Disclaimer: Es gibt natürlich noch weitaus mehr Dinge, die einem den Umstieg erschweren können. Besonders, wenn man noch am System irgendwas anpassen will. Aber hier sind jetzt erstmal die vier Hürden, die mir besonders schwer gefallen sind. Falls wir noch mehr solcher Linux-Videos machen sollen, dann schreibt doch mal in die Kommentare, welche Sachen euch bei Linux abschrecken.
Folgendes Szenario: Windows hat mich mal wieder an den Rand der Verzweiflung gebracht und es reicht. Ich habe keinen Bock mehr. Ich probiere jetzt Linux aus. Dann jetzt einfach mal Linux bei Google eingeben und ja. Also welches davon soll ich denn jetzt nehmen? Linux Mint, Red Hat, Ubuntu und was zum Geier ist eigentlich GNOME? Und da sind wir direkt bei Hürde Nummer 1: Distributionsverwirrung.
Also das Ding ist, es gibt quasi unendlich viele verschiedene Distributionen, also ganz viele verschiedene Geschmacksrichtungen von Linux. Aber welche davon sollte man denn jetzt nehmen? Aber erstmal: Was heißt das eigentlich alles? Hier einmal kurz drei wichtige Begriffe, die man als Anfänger nicht unbedingt auf dem Schirm hat.
Es gibt einmal den Linux-Kernel. Das ist der Betriebssystemkern und die grundlegende Schnittstelle zwischen Software und Hardware. Also die unterste Schicht des Betriebssystems, auf dem alle Linux-Distributionen basieren.
Eine Distribution ist eine Sammlung von Software, die dann quasi den kompletten Betriebssystem-Oberbau bildet. Das Ganze nennt man auch Userland. Also sowas wie die grafische Oberfläche, Anwendungen, Paketmanager und so weiter.
Auch noch ein wichtiger Begriff: Desktop-Environments. Ein Desktop-Environment ist eine Sammlung von Tools, die zusammen eine komplette Benutzeroberfläche bilden, mit der man das Betriebssystem bedienen kann. Dazu gehört dann sowas wie der Fenster- und Filemanager, das Startmenü, die Taskleiste, das Screenshot-Tool und so weiter. Davon gibt es viele verschiedene und man kann oft unabhängig von der Distribution auswählen, welches man gerne benutzen möchte.
Aber eins nach dem anderen: Wie finde ich jetzt die für mich am besten geeignete Distribution? Also ich hätte hier auf jeden Fall zwei konkrete Vorschläge, die sich für mich als Anfänger gut angefühlt haben und von denen wir hier im 3003-Team auch Fans sind. Zu denen komme ich aber gleich.
Erstmal: Was sind denn überhaupt wichtige Aspekte, in denen sich Distributionen so unterscheiden? Die für mich wichtigsten Kriterien sind einmal, in welchen Abständen geupdatet wird, also ob da ständig neue Updates reinkommen oder nur so halbjährlich oder jährlich, ob das Teil einsteigerfreundlich ist, ob es auf alter und neuer Hardware schnell läuft und für mich am allerwichtigsten der Look & Feel, weil das Ganze soll mir ja auch Spaß machen.
Unsere zwei Empfehlungen erfüllen übrigens alle diese Anforderungen. Falls man sich selbst ein bisschen schlaumachen will, haben die Kollegen von c’t sich glücklicherweise schon was echt Praktisches dafür ausgedacht. Das hier ist ein Linux-Fahrplan. Da sind einige der beliebtesten Distributionen als U-Bahn-Linien aufgezeichnet, die jeweils an verschiedenen Haltestellen halten, die für verschiedene Eigenschaften stehen. Also ob die für schwache Computer geeignet sind, welchen Look die von Haus aus haben, ob die sich für Gaming eignen und in welchen Abständen geupdatet wird. Schaut da doch gerne mal rein, Link ist in der Beschreibung.
Aber jetzt zu unseren Empfehlungen. Empfehlung Nummer 1 ist einmal das sehr anfängerfreundliche Linux Mint, was auf Ubuntu basiert. Das läuft auch auf alter Hardware noch schön schnell und bekommt halbjährlich Updates. Standardmäßig läuft da das Desktop-Environment Cinnamon, mit dem man sich direkt gut zurechtfinden sollte, besonders wenn man von Windows kommt. Also mit so einer stinknormalen Taskleiste hier unten und Startmenü und so weiter.
Was auch super easy ist, ist das Installieren von Programmen. Denn Linux Mint hat einen eigenen, ja, ich nenne ihn mal App Store namens Anwendungsverwaltung eingebaut. Da kann man entspannt Programme suchen und installieren. Alles ohne Kommandozeile. Da findet man auch nicht nur Open-Source-Kram wie zum Beispiel Spotify oder Steam. Alles schön kuratiert, mit Bewertungen und so weiter. Richtig nice.
Also Linux Mint ist auf jeden Fall ein sehr simpler Einstieg in die Welt von Linux, lässt sich ähnlich wie Windows bedienen, man muss so gut wie nie mit einer Kommandozeile rumhantieren und kann vieles in einer grafischen Oberfläche bedienen. Und ja, das Ding läuft einfach.
Aber vielleicht geht es euch ja wie mir und ihr wollt Linux auch schon so ein bisschen erleben einfach. Also nicht alles im Easy Mode, genau wie bei Windows, sondern halt Linux richtig benutzen. Also neue Sachen lernen und ja, einfach irgendwie Spaß damit haben.
Da wäre auf jeden Fall CachyOS eine Option. Das ist auch die Distribution, mit der ich am meisten Erfahrung gesammelt habe und die mir und auch Keno aktuell am besten gefällt. Über die hatten wir auch schon ein komplettes Video gemacht. CachyOS basiert auf Arch Linux und bekommt im Gegensatz zu Linux Mint regelmäßig kleinere Updates statt nur jedes halbe Jahr. Dadurch ist man immer auf dem neuesten Stand, es könnte aber auch potenziell was kaputt gepatcht werden, also das sollte man vielleicht im Hinterkopf haben. Und falls ihr euch fragt: Hä, ist Arch Linux nicht bekannt als total frickelig und wenig anfängerfreundlich? Ja, für die Grundversion, also Vanilla Arch, stimmt das auch. Das besteht nur aus dem Nötigsten wie Treiber, Paketmanager und so weiter. Alles weitere müsste man sich manuell dazu installieren.
Bei Arch-Ablegern, auch Derivate genannt, wie CachyOS hat das halt schon jemand gemacht. Und ja, auch CachyOS funktioniert out of the box intuitiv und ohne großes Kommandozeilengefricke. Beispielsweise lassen sich hier in diesem Onboarding-Fenster mit einem Klick alle Sachen installieren, die man fürs Gaming braucht. Da sind dann so Sachen wie Proton und Steam dabei. Sehr praktisch. CachyOS hat auch einen Package-Installer. Das ist eine Liste an Software, wo man sich sowas wie Firefox installieren kann. Das Ding ist aber nicht ganz so hübsch wie bei Linux Mint, hat keine Screenshots oder Bewertungen und so, läuft aber auch komplett ohne Kommandozeile. Was man hier nicht findet, muss man mit einem Paketmanager über die Kommandozeile installieren. Dazu gleich mehr.
Okay, Distribution ist ausgewählt. Also ISO runterladen, auf einen USB-Stick flashen und installieren. Das hatten wir schon in ganz vielen anderen Videos Schritt für Schritt erklärt, deswegen lasse ich das hier mal weg, pack euch aber einen Link in die Beschreibung mit Timestamp.
Eine Sache ist aber dabei wichtig: Bei der Installation von CachyOS und auch bei vielen anderen Distributionen wird gefragt, welches Desktop-Environment man installieren will. Wir erinnern uns, das Desktop-Environment ist quasi der komplette Look and Feel vom Desktop. Hier empfehlen wir ganz klar entweder KDE Plasma oder GNOME für den Anfang. Die verhalten sich nämlich beide relativ ähnlich wie Windows oder macOS. Bitte nicht ausrasten, ich finde, die verhalten sich ähnlich. Also KDE eher wie Windows 10 und GNOME eher wie macOS. Ich benutze gern GNOME, weil das einfach ein bisschen besonderer ist als KDE. Aber keine Angst, das ist auch echt easy zu bedienen. Und falls man Linux Mint installiert, ist da eh standardmäßig erstmal Cinnamon drauf, was sich auch sehr wie Windows anfühlt.
Okay, das Ding ist installiert, in diesem Fall CachyOS, und hier ist direkt Firefox am Start. Damit kann man sich erstmal überall einloggen und hier gibt es auch so ein Willkommensfenster, wo ich direkt so Kram für Spiele installieren kann. Das ist schon nice. Die Taskleiste checkt man auch direkt, hier sind schon installierte Programme und hier komme ich in den Filemanager. Ich kann hier meine Dateien ablegen, alles easy. Ich glaube, ich mache mir mal ein bisschen Musik dabei an. Ich lade mal eben Spotify runter. Also bei Google einfach Spotify, Linux suchen und ja, was zum Geier ist das hier? Das ist Hürde Nummer 2: Software installieren.
Also die für mich größte Verwirrung beim Umstieg auf Linux war die Frage: Wie installiere ich jetzt hier mein Zeug? Denn für die meiste Software gibt es keine ausführbare Installationsdatei wie bei macOS oder Windows. Also nichts, was man einfach runterladen und dann doppelklicken kann. Ihr könnt dafür wie gesagt den in die Distribution eingebauten grafischen App Store verwenden, aber ihr könnt auch, und das ist eigentlich der Standardweg, einen Paketmanager über die Kommandozeile benutzen.
Ja gut, aber was zum Geier ist ein Paketmanager? Paketmanager sind Programme, mit denen man Software installieren, updaten und auch wieder deinstallieren kann. Alles auf der Kommandozeile. Das klingt jetzt erstmal kompliziert, ist es aber gar nicht eigentlich. Ganz im Gegenteil: Das ist, wenn man sich erstmal ein bisschen dran gewöhnt hat, viel praktischer als mit irgendwelchen .exe-Dateien rumzuhantieren. Je nach Distribution unterscheiden sich die Paketmanager etwas, funktionieren aber bis auf leicht abgeänderte Befehle oft sehr ähnlich. Bei Linux Mint und auch bei Ubuntu und allen sogenannten Debian-Derivaten heißt der vorinstallierte Paketmanager „apt“, bei Fedora DNF und bei CachyOS bzw. allen Arch-Linuxen „pacman“. Mit denen lädt man Pakete, also auch Programme und deren Abhängigkeiten, aus offiziellen Datenbanken, auch Repositories genannt, von beispielsweise Arch Linux herunter. Das sind Datenbanken an essentiellen und beliebten Programmen, die von den Distributionen betrieben und gepflegt werden.
Also mal als Beispiel. Um Spotify zu installieren, öffnet man die Konsole und tippt hier unter CachyOS folgendes ein: sudo pacman -S spotify-launcher. Dann installiert pacman Spotify mit allen benötigten Abhängigkeiten komplett vollautomatisch. Das war’s, mehr muss man nicht machen. So installiert man Pakete über diesen Paketmanager.
Mal kurz zur Erklärung, was das alles heißt: sudo steht hier quasi für „als Admin ausführen“. Danach kommt der Name vom Paketmanager, in dem Fall pacman, dann der Befehl fürs Installieren, -S, das kommt von „Synchronisieren“, und dann der Name vom Paket. Hier sieht man auch ganz gut, warum das Ding „pacman“ heißt. Das ist halt wie vom Spiel, also hier mit den kleinen Punkten da.
Okay, aber woher weiß ich, was ich genau eintippen muss für das Programm, was ich runterladen bzw. installieren will? Dass man „spotify-launcher“ eingeben muss statt einfach nur Spotify, checkt man ja nicht unbedingt direkt. Einmal könnte man sudo pacman -Ss spotify eingeben, das ist quasi eine Suche, und es werden Pakete mit Spotify im Namen aufgelistet. Da steht dann aber auch manchmal sehr viel, und das kann auch schon irgendwie verwirrend sein.
Man kann aber auch auf dieser Seite hier direkt bei Arch im Repository suchen. Also wenn ich mir beispielsweise den Signal-Messenger-Client installieren will, dann tippe ich hier einfach Signal ein und ah, hier steht „signal-desktop“. Also zum Installieren einfach wieder in der Konsole das hier eingeben: sudo pacman -s signal-desktop und boom, ist installiert.
Genauso einfach ist es, Sachen zu updaten. Dafür muss man statt -S -Syu und dann wieder den Namen des Programms eingeben. Also in diesem Fall sudo pacman -Syu spotify-launcher. Dann wird das Programm und alles, was dazu gehört, einfach geupdatet.
Viel praktischer ist es aber, wenn man nur sudo pacman -Syu benutzt, also ohne Paketnamen. Dann wird nämlich die komplette Distribution und damit auch alle mit pacman installierten Pakete auf einmal geupdatet. Mega praktisch. Also quasi ein Befehl, um einfach mal fast alles zu updaten.
Bei anderen Paketmanagern wie „apt“, was ja bei Linux Mint vorinstalliert ist, sind die Befehle ein bisschen anders, aber bis auf die unterschiedliche Syntax funktioniert das eigentlich gleich. Nur als Beispiel: Um unter Linux Mint per Paketmanager Spotify zu installieren, muss man sudo apt-get install spotify-client eingeben. Aber ja, bei Linux Mint findet man halt schon sehr, sehr viel Software in diesem vorhandenen App Store. Aber mit Kommandozeilen macht das schon irgendwie ein bisschen mehr Spaß, finde ich.
Aber was ist, wenn es das Programm, was ich suche, nicht im offiziellen Arch-Repository gibt? Es gibt nämlich auch noch weitere Pakete und Datenbanken, wie beispielsweise das Arch User Repository, kurz AUR. Die Pakete daraus kann man aber nicht einfach wie eben beschrieben mit pacman installieren, sondern dafür braucht man andere Programme. Und weil das AUR user-generiert ist, also da potenziell auch Malware zu finden ist, lassen wir das hier jetzt erstmal weg.
Falls wir aber mehr solcher Linux-Anfänger-Videos machen sollten, wäre das auf jeden Fall ein Teil davon. Schreibt gerne mal in die Kommentare, ob ihr euch das wünscht.
Okay, weiter geht’s. Ich habe die Bedienung vom Desktop grob verstanden, ist ja eigentlich auch alles easy, und habe mir meine Grundbedürfnisse an Programmen installiert. Aber was ist denn mit Gaming? Geht das einfach?
Ja, das ist Hürde Nummer 3: Gaming. Das ist schon fast gar keine Hürde mehr, denn das ist in den letzten Jahren alles viel einfacher geworden. Dickes Dankeschön an Valve an der Stelle. Trotzdem wollte ich das hier mal erwähnen, weil ich mir vorm Umstieg Gaming unter Linux immer sehr krampfig vorgestellt habe. Ist es aber wirklich gar nicht.
Die zwei wichtigsten Punkte hier sind einmal der Grafikkartentreiber und Proton bzw. Wine bzw. eine Kompatibilitätsschicht. Falls ihr eine AMD-Karte habt, ist das super, also für Linux-Gaming. Denn AMD-Treiber sind Open Source und normalerweise stecken die schon fest im Linux-Kernel. Nvidia-Treiber sind mittlerweile zum Teil auch Open Source und werden bei CachyOS direkt mit installiert, sind halt nicht standardmäßig im Kernel integriert. Alles andere, was man braucht, bekommt man unter CachyOS auch super einfach. Einfach nur in diesem Begrüßungsprogramm, was bei CachyOS standardmäßig startet, auf „Apps & Tweaks“ und dann auf „Install Gaming Package“ klicken. Dann installiert CachyOS vollautomatisch wichtige Pakete wie Proton und auch direkt Steam.
Bei Linux Mint ist das fast genauso: Da einfach über „System Settings“ „Driver Manager“ den empfohlenen Nvidia-Treiber installieren, fertig. Steam kann man dann einfach über den Software-Manager, also diesen App Store, runterladen. Und das war’s dann eigentlich auch schon.
Man kann jetzt einfach Steam-Spiele runterladen und das meiste läuft out of the box richtig gut, teilweise mit gleichen, wenn nicht sogar mehr FPS wie bei Windows. Das Einzige, was weiterhin nicht auf Linux läuft, sind Multiplayer-Spiele mit Anti-Cheat-Software, die tief ins System eingreifen. Also sowas wie Valorant, League of Legends, Fortnite und so weiter. Da gibt’s bisher leider irgendwie noch keine Möglichkeit, das ohne Probleme auf Linux zum Laufen zu bringen.
Hürde Nummer 3,5: Linux-Research. Okay, das ist jetzt nur so eine halbe Hürde, aber sagen wir mal, man hat ein Problem oder will irgendwas wissen und geht dafür ins Internet. Ja, und was man da findet, kann für Anfänger echt ein Albtraum sein.
Unendlich viele Foren, Reddit-Beiträge und Wikis, die meistens von Leuten geschrieben werden, die so deep im Thema drin sind, dass man als Anfänger wirklich mal so gar nichts checkt. Also ich will damit auf keinen Fall der Linux-Community vorwerfen, dass die nicht hilfsbereit sind. Im Gegenteil: Die Antworten auf einfache Fragen sind zum Teil super ausführlich und wenn man sich ein bisschen besser auskennt, dann helfen die auch bestimmt. Aber wenn man als Anfänger sowas hier liest, ja, puh, keine Ahnung.
Mal als Beispiel: Hier fragt jemand: „Hey, ich würde gerne die proprietären AMD-Treiber installieren und die ROCm-Software benutzen. Wie mache ich das? P. S., ich bin kein Linux-Experte, also bitte, bitte nicht sauer sein, wenn ich die Frage naiv gestellt habe.“ Und als Antwort kommt nur: „Es wurde schon erklärt“, mit einem Link aufs Wiki. Und ja, da steht dann auch was zur ROCm-Software, aber da jetzt als Anfänger rauszulesen, was wirklich zu tun ist, ist einfach ultra schwer.
Aber davon braucht man sich heutzutage nicht mehr abschrecken lassen, weil es gibt ja LLMs. Okay, also dass man sich mit KI Fragen beantworten lassen kann, ist jetzt keine große Erkenntnis, aber dadurch, dass man sich Schritt für Schritt jederzeit helfen lassen kann, ist der Umstieg auf Linux gerade so einfach wie noch nie, wie ich finde. Das wollte ich zumindest nicht unerwähnt lassen. Aber ganz wichtig: Nicht einfach die Befehle copy-pasten, sondern versucht nachzuvollziehen, was da passiert ist, sonst lernt man ja auch nichts.
Also Software ist installiert, die Bedienung und Gaming läuft auch super, alles ist schön schnell. Es gibt aber leider noch einen gigantischen Elefanten im Raum, der für viele, auch für mich, den Hauptgrund ausmacht, warum man nicht zu 100 % auf Linux umsteigen will. Und das ist Hürde Nummer 4: Software-Verfügbarkeit.
Daran kommt man leider noch nicht wirklich vorbei. Viele Programme, die teilweise auch für die Arbeit wichtig sind, gibt es auf Linux einfach nicht, beziehungsweise wenn, dann nur über sehr krampfige Umwege. Besonders die Desktop-Versionen der Office-Produkte, also so Sachen wie Word, Teams, Excel und die Adobe Suite mit Premiere, After Effects, Photoshop usw., schmerzen da echt besonders, denn die brauchen viele zum Arbeiten.
Es gibt so Sachen wie Winboat, damit kann man Windows-Apps zum Laufen bringen, haben wir auch schon ein Video zu gemacht. Das Ganze ist aber noch nicht so richtig ausgereift und vor allem nicht anfängerfreundlich. Manche Sachen wie die Office-Apps laufen auch ganz gut im Browser. Ist nicht ganz so schön, aber man kann sie zumindest verwenden. Bei Adobe-Programmen wie Premiere, da geht das nicht, da muss man sich Alternativen suchen.
Und von denen gibt es eine Menge, auch echt gute. Die jetzt aber alle aufzuzählen, würde ein bisschen den Rahmen sprengen. Viel besser wäre es doch, wenn wir ein ganz eigenes Video zu Linux-Alternativen von gängigen Windows-Programmen machen. Oder bitte in die Kommentare schreiben, falls ihr sowas gerne sehen wollt.
Tschüss!
c’t 3003 ist der YouTube-Channel von c’t. Die Videos auf c’t 3003 sind eigenständige Inhalte und unabhängig von den Artikeln im c’t Magazin. Die Redakteure Jan-Keno Janssen, Lukas Rumpler, Sahin Erengil und Pascal Schewe veröffentlichen jede Woche ein Video.
(sahe)
Künstliche Intelligenz
C++ für eingebettete Systeme: constexpr und consteval
Im heutigen Beitrag zeige ich, wie modernes C++ den Code für eingebettete Systeme beeinflussen kann. Der Code nutzt Features bis zu C++23.
Weiterlesen nach der Anzeige

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.
Das Beispiel, das ich unten zeige, dreht sich um mindestens zwei Fragen, die mir Kunden schon oft gestellt haben:
- Wozu ist
constevalgut? - Was ist dieser benutzerdefinierte Literal-Operator und warum sollte mich das interessieren?
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.
Was ist eine MAC-Adresse?
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 (IP) beschäftigen. Die Basis der Netzwerkkommunikation ist die Netzwerkkarte (NIC). Jede NIC hat eine eindeutige Medium Control Address (MAC) zugewiesen bekommen. Die MAC-Adresse ist die Basis für alles, was darauf aufbaut, wie TCP/IP.
Weiterlesen nach der Anzeige
Eine MAC-Adresse besteht aus genau sechs Bytes. Eine Möglichkeit, eine MAC-Adresse in Code darzustellen, ist folgende:
struct MACAddr {
std::array data;
};
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:
12:34:56:78:90:AB
Einige dieser MAC-Adressen sind schon beim Kompilieren bekannt, andere können Nutzer während der Laufzeit eingeben.
Parsen einer MAC-Adresszeichenfolge.
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 ist MACAddr als Basis. Aus Gründen der Speichersicherheit habe ich mit std::array angefangen. 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 (6 Bytes mal 2 aufgrund des Hexadezimal-Formats plus 5 Trennzeichen). Das Auffinden der Trennzeichen ist ein weiterer Punkt.
In macFromString ist eine mögliche Implementierung:
constexpr std::expected // #A
macFromString(std::span addr) // #B
{
// #C
if(addr.size() < 17) { return std::unexpected(std::errc::message_size); }
MACAddr res{};
// #D
for(int i = 0; auto& val : res.data) {
// #E
// C++26 will have .at!
if((i < 5) and (addr[2] != ':')) {
return std::unexpected(std::errc::message_size);
}
auto isAllowedHexChar = [](char c) {
return ((('a' <= c) and ('f' >= c)) or // isalpha reduced
(('A' <= c) and ('F' >= c)) or // isalpha reduced
(('0' <= c) and ('9' >= c)) // is digit
);
};
// #F
if(not(isAllowedHexChar(addr[0]) and isAllowedHexChar(addr[1]))) {
return std::unexpected(std::errc::invalid_argument);
}
// #G
if(std::from_chars(addr.data(), addr.data() + 2, val, 16).ec !=
std::errc()) {
return std::unexpected(std::errc::message_size);
}
// #H
addr = addr.subspan((addr.size() >= 3) ? 3 : addr.size());
++i;
}
return res;
}
Ich fange mit dem Rückgabedatentyp std::expected (#A) 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 (daher der Name expected), und der zweite Parameter ist der Datentyp für die Fehlerbedingung. Einfachheitshalber habe ich hier std:errc verwendet. Du solltest immer einen Datentypen wählen, der auf die Anforderungen in deiner Codebasis zugeschnitten ist.
Die Stärke von std::expected liegt darin, dass es entweder einen Wert oder einen Fehlercode enthält. Es gibt zwar ungültige MAC-Adressen, aber nehmen wir mal den einfachen Weg und betrachten die Adresse als ungültig, wenn die Zeichenfolge zu kurz ist, die erforderlichen Trennzeichen nicht enthält oder ungültige Zeichen enthält (wie T, das keine Hexadezimalzahl ist). Der Einsatz von std::expected hilft dabei, das Out-Parameter-Muster zu entfernen, das ich ungern mag.
Als Nächstes siehst du, dass macFromString in #B einen std::span als Parameter verwendet. Das Schöne an std::span, der in C++20 hinzugefügt wurde, ist, dass es eine sehr kostengünstige Ansicht der Originaldaten ist, während std::span die Datengröße beibehält. All diese Punkte machen std::span zum perfekten Datentyp, um Array-ähnliche Daten zu übergeben und dabei trotzdem die Grenzen sicher einzuhalten.
Als Erstes prüfe ich in macFromString, ob die Zeichenfolge lang genug ist (#C). Dank std::span ist das nicht nur einfach, sondern auch sicher.
Was passiert, wenn die Zeichenfolge zu kurz ist? Das wäre unerwartet. Deshalb gebe ich in diesem Fall ein std::unexpected mit einem std:errc-Code zurück. Hier zeigt sich die Schönheit von std::expected: Der Fehlerfall wird absolut klar gekennzeichnet.
Schauen wir uns jetzt die Konvertierung an, für die eine Schleife nötig ist. Ich setze eine bereichsbasierte For-Schleife (#D) ein und verwende dafür C++20 mit einem Initialisierer meiner Zählvariablen i.
Ich überprüfe innerhalb der Schleife auf das Trennzeichen, das sich an Position zwei in std::span befindet, wenn wir den letzten Teil nicht betrachten. Das ist dasselbe Verfahren wie oben in #C: Wenn kein Trennzeichen vorhanden ist (oder ein anderes), gebe ich in #D std::unexpected zurück.
In #F wird überprüft, ob die beiden aktuell betrachteten Zeichen im Bereich eines gültigen Hexadezimal-Zeichens liegen. Leider ist std::isdigit nicht constexpr. Das Gleiche gilt für std::isalpha, aber das fehlende constexpr bei dieser Funktion ist nicht so wichtig, da hier ein reduzierter Bereich erforderlich ist.
Als Nächstes kommt in #G die eigentliche Konvertierung. Ich benutze std::from_chars aus C++17. Das Schöne daran ist, dass ich die Werte aus std::span direkt übergeben kann, obwohl sie nicht mit dem üblichen Hexadezimalzahl-Indikator 0x beginnen. Ich kann std::from_chars mitteilen, welche Basis die Zahl hat.
Sollte die Konvertierung fehlschlagen, überprüfe ich den Fehlercode ec[/code und gebe erneut ein [code]std::unexpected zurück. Für deinen Code ist es nützlich, verschiedene Fehlerwerte zu verwenden, um anzuzeigen, an welcher Stelle die Konvertierung fehlgeschlagen ist.
Der letzte Schritt in #H besteht dann darin, das std::span mithilfe seiner subspan-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.
Es ist wichtig, nicht zu vergessen, i als letzten Schritt zu erhöhen. Dann haben wir einen robusten und sicheren MAC-Adressen-Parser, der die neuesten C++-Funktionen nutzt.
Warum constexpr?
Ein kleines Detail, das ich bei der Erläuterung der Implementierung von macFromString noch nicht angesprochen habe, ist die erste Zeichenfolge in der Funktionsdeklaration, die das Schlüsselwort constexpr bildet.
Die Antwort ist einfach: Wir wollen macFromString zur Kompilierungszeit aufrufen können. Hier kommt der anfangs erwähnte Literal-Operator (UDL) 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.
Wir benötigen einen UDL _macaddr, der ein MACAddr-Objekt zurückgibt, damit der folgende Code gültig ist:
// #A
auto data{std::to_array("12:34:56:78:90:AB")};
auto m = macFromString(data);
auto compileTimeMAC = "12:34:56:78:90:AB"_macaddr;
Die Implementierung des UDL-Operators ist recht einfach:
consteval MACAddr operator""_macaddr(const char* str, size_t length)
{
return macFromString({str, length}).value();
}
Ich benutze die UDL-Operatorform, die ein const char* und ein std::size_t nimmt. Der Compiler erkennt freundlicherweise die Größe der Konstantenzeichenfolge zur Kompilierungszeit und teilt sie dem Operator mit. Damit sind alle Informationen zum Aufruf von macFromString vorhanden. 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 von macFromString ein std::span.
Aber macFromString gibt ein std::expected zurück, mehr als nur ein MACAddr. Was tun? Ich rufe einfach .value für das Ergebnis von macFromString auf. Falls std::expected keinen 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!
Hast du das erste Schlüsselwort bemerkt, das ich für den UDL-Operator verwendet habe? Es ist consteval! 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?
consteval hat hier noch einen weiteren Vorteil: Wenn die Implementierung von macFromString nicht constexpr 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.
Robuster, sicherer und besser lesbar
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 als consteval definieren solltest.
(rme)
Künstliche Intelligenz
TDWI Hot Topics: Agentic AI im Unternehmen wirksam machen
Agentic AI geht über klassische GenAI-Anwendungen hinaus, indem sie autonome, zielgerichtete Agenten einsetzt, die Tools verwenden, Entscheidungen unterstützen und Aufgaben über mehrere Schritte hinweg eigenständig ausführen können. Dadurch rückt neben der reinen Modellleistung vor allem die Fähigkeit in den Mittelpunkt, zuverlässige End-to-End-Workflows aufzubauen – inklusive der passenden Balance beim Autonomiegrad, eines pragmatischen Risikomanagements und klar messbarer Ergebnisse.
Weiterlesen nach der Anzeige
Über sieben Stunden ausgewähltes Fachprogramm
Am 22. April widmet sich die Hot Topics einen ganzen Tag lang um die Chancen und Herausforderungen von Agentic AI. Expert:innen aus Beratung, Technologie und Praxis zeigen, wie man geeignete Use Cases identifiziert, Agenten schrittweise in Prozesse integriert und was in der Umsetzung wirklich funktioniert (und was nicht).
Breites Themenspektrum auf der Agenda
Die Veranstaltung richtet sich an IT-Verantwortliche, Digitalisierungs- und Innovationsverantwortliche sowie alle, die sich mit dem produktiven Einsatz von KI-Agenten beschäftigen. Ein zusätzlicher Anreiz für Schnellentschlossene: Noch bis zum 27. März ist das Ticket zum vergünstigten Preis von 249 Euro erhältlich.
Das Online-Event findet am 22. April 2026 statt. Alle Informationen zur Veranstaltung und Anmeldung finden Sie auf der Webseite.
()
Künstliche Intelligenz
Elektroauto Xpeng G9 im Test: Lädt schneller als erlaubt
Die Antriebswende trägt mitunter eigenwillige Früchte, und der Xpeng G9 ist ein Spiegelbild dessen. Das 4,9 m lange E-SUV wiegt leer rund 2,3 Tonnen und kann schon in der mittleren Version in 6,4 Sekunden aus dem Stand auf 100 km/h beschleunigen. Das Topmodell lässt gar die meisten der jemals gebauten Porsche 911 hinter sich. Wer es nicht so eilig hat, bewegt diesen Brocken im Schnitt mit dem Heizwert von weniger als zwei Litern Diesel 100 km weit. Bei entsprechender Vorkonditionierung kann die Batterie schneller geladen werden, als es die CCS-Vorgaben derzeit eigentlich erlauben. Finanziell unterbietet der G9 zahlreiche Konkurrenten mit Verbrenner. Sollen diese dann auch nur ansatzweise bei den subjektiven Fahrleistungen mithalten können, ist das Rennen gelaufen, bevor es angefangen hat. Hat die Konkurrenz nun gar keine Chance mehr? Doch, doch, durchaus, denn der Xpeng G9 zeigte im Test einige markante Schwächen.
- Seit Ende 2024 auf dem Markt
- Abmessungen: 4,89 m lang, 1,94 m breit, 1,68 m hoch, Radstand: 3 m
- Leistung: 258 bis 423 kW
- Preis: ab 59.600 Euro
- Größtes Plus: Sehr hohe Ladeleistung
- Größte Schwäche: Sehr umständliche Bedienung
In einem für europäische Verhältnisse riesigen Auto sollte ein ebensolches Platzangebot selbstverständlich sein. Der G9 liefert: Raum gibt es vorn wie hinten mehr als genug, und auch der Kofferraum bietet mit 660 Litern eine angenehme Weitläufigkeit. Etwas getrübt wird das allerdings durch den Umstand, dass Fahrer mit sehr langen Beinen sich einen großzügigeren Verstellbereich nach hinten wünschen. Dem durchschnittlich großen Steuermann wird das freilich kaum auffallen. Ausgesprochen kräftig ist die Massage, die allerdings nicht darüber hinwegtäuschen kann, dass die Sitze an sich trotz zahlreicher Einstellmöglichkeiten und üppiger Abmessungen nicht zu den bequemsten gehören. Irgendwas drückt in der Lehne immer, hielten einige Fahrer in der Redaktion fest. Ungewöhnlich ist die Entscheidung, auch in der zweiten Reihe kaum Abstriche zu machen: Heizung, Lüftung, Massage und eine verstellbare Beinauflage gibt es im G9 auch für die Hinterbänkler.

Ziemlich leise
In einem solch teuren Auto darf der Kunde eine exzellente Geräuschdämmung erwarten, und auch hier sticht der G9 positiv hervor. Selbst bei gehobenem Tempo auf der Autobahn bleibt das E-SUV ziemlich leise, und auf guten Sommerreifen dürften die Abrollgeräusche noch weiter in den Hintergrund rücken. Zusammen mit den im von uns gefahrenen Modell mit Heckantrieb ausgezeichneten Fahrleistungen ergibt sich potenziell ein hervorragend geeignetes Reiseauto für sehr lange Strecken.
Das war die Leseprobe unseres heise-Plus-Artikels „Elektroauto Xpeng G9 im Test: Lädt schneller als erlaubt“.
Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.
-
Künstliche Intelligenzvor 2 MonatenSchnelles Boot statt Bus und Bahn: Was sich von London und New York lernen lässt
-
Social Mediavor 3 WochenCommunity Management zwischen Reichweite und Verantwortung
-
Künstliche Intelligenzvor 2 Wochen
Top 10: Die beste kabellose Überwachungskamera im Test – Akku, WLAN, LTE & Solar
-
Social Mediavor 24 StundenCommunity Management und Zielgruppen-Analyse: Die besten Insights aus Blog und Podcast
-
Datenschutz & Sicherheitvor 3 MonatenSyncthing‑Fork unter fremder Kontrolle? Community schluckt das nicht
-
Entwicklung & Codevor 3 MonatenKommentar: Anthropic verschenkt MCP – mit fragwürdigen Hintertüren
-
Künstliche Intelligenzvor 3 MonatenGame Over: JetBrains beendet Fleet und startet mit KI‑Plattform neu
-
Social Mediavor 3 MonatenDie meistgehörten Gastfolgen 2025 im Feed & Fudder Podcast – Social Media, Recruiting und Karriere-Insights
