extern struct und ABI-Layout
Passen Sie das Speicherlayout einer C-Struktur an.
extern struct und ABI-Layout ist eine kostenlose Zig Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Zig Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Zig Academy-Kurs umfasst insgesamt 4 Lektionen.
Mit C kommunizieren
Wenn Zig C-Code aufruft, müssen beide Seiten dasselbe Speicherlayout erwarten. Dieser gemeinsame Vertrag ist die ABI.
Gewöhnliche Structs sind nicht garantiert
Ein regulärer struct lässt Zig die Reihenfolge der Felder und das Padding frei wählen, sodass sein Layout möglicherweise nicht dem entspricht, was eine C-Bibliothek erwartet.
extern struct eingeben
Markieren Sie einen Typ als extern struct, dann legt Zig seine Felder gemäß der C-ABI an, sodass sie Feld für Feld einer C-Struktur entsprechen.
const Point = extern struct {
x: i32,
y: i32,
};Felder bleiben in Reihenfolge
Eine extern-Struktur behält Ihre Deklarationsreihenfolge bei, genau wie C, sodass das erste Feld im Speicher immer an erster Stelle steht.
Padding wie bei C
Anders als eine gepackte Struktur fügt eine extern-Struktur weiterhin Padding zur Ausrichtung hinzu, genau wie es ein C-Compiler tun würde.
Packed vs. Extern
Verwenden Sie packed für ein bitgenaues Layout und extern für ein Byte-Layout, das zu C passt. Beide lösen unterschiedliche Layout-Probleme.
Strukturen an C übergeben
Eine extern-Struktur kann direkt an eine C-Funktion übergeben werden, da ihr Layout dem Header entspricht, gegen den die Funktion kompiliert wurde.
extern fn use_point(p: Point) void;Die Größe prüfen
Bestätigen Sie mit @sizeOf, dass eine extern-Struktur zu C passt. Dabei wird die Gesamtgröße in Bytes einschließlich eventuellen Alignment-Paddings angegeben.
const n = @sizeOf(Point); // 8Feld-Offsets untersuchen
Verwenden Sie @offsetOf, um genau zu sehen, wo jedes Feld beginnt. Das eignet sich hervorragend, um zu prüfen, ob eine Struktur mit C übereinstimmt.
const off = @offsetOf(Point, "y"); // 4Nur C-kompatible Typen
Felder in einer extern-Struktur müssen C-kompatible Typen sein. Daher sind Zig-spezifische Strukturen wie Slices darin nicht erlaubt.
Die Brücke zu C
Zusammen ermöglichen extern struct und die C-ABI, dass Zig und C Daten sicher gemeinsam verwenden – ohne Kopieren oder Annahmen über das Layout. 🔗
Schnelltest
Rufen Sie sich ins Gedächtnis, an welches Layout extern struct angepasst ist.
Zusammenfassung
Sie haben gelernt, dass extern struct der C-ABI entspricht: geordnete Felder mit C-typischem Padding, an C übergebbar und mit @sizeOf und @offsetOf überprüfbar. 🎉
Häufig gestellte Fragen
Ist die Lektion „extern struct und ABI-Layout“ kostenlos?
Ja — der vollständige Text von „extern struct und ABI-Layout“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Zig Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Zig Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „extern struct und ABI-Layout“?
Passen Sie das Speicherlayout einer C-Struktur an. Du übst Zig Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Zig Academy zu starten?
Keine Vorkenntnisse erforderlich. Zig Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „extern struct und ABI-Layout“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Zig Academy-Lektion Code schreiben und ausführen?
Ja. Jede Zig Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- packed struct für exaktes Layout
- Ganzzahlen beliebiger Breite wie u3
- Bitfelder und Flags
- extern struct und ABI-Layout