extern struct dan Tata Letak ABI
Sesuaikan tata letak memori struct C.
extern struct dan Tata Letak ABI adalah pelajaran Zig Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Zig Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Zig Academy mencakup 4 pelajaran total.
Berkomunikasi dengan C
Saat Zig memanggil kode C, kedua sisi harus menyepakati tata letak memori. Kontrak bersama itu disebut ABI.
Struct Biasa Tidak Dijamin
struct biasa membiarkan Zig menentukan urutan field dan padding secara bebas, sehingga tata letaknya mungkin tidak sesuai dengan yang diharapkan pustaka C.
Memahami extern struct
Tandai suatu tipe sebagai extern struct, lalu Zig akan menata field-nya menggunakan ABI C agar setiap field sesuai dengan struct C.
const Point = extern struct {
x: i32,
y: i32,
};Field Tetap Berurutan
Extern struct mempertahankan urutan deklarasi Anda, sama seperti C, sehingga field pertama selalu berada paling awal di memori.
Padding seperti pada C
Berbeda dari packed struct, extern struct tetap menambahkan padding untuk alignment, persis seperti yang dilakukan kompiler C.
Packed vs Extern
Gunakan packed untuk tata letak yang sama persis hingga tingkat bit, dan extern untuk menyesuaikan tata letak byte C. Keduanya menyelesaikan masalah tata letak yang berbeda.
Meneruskan Struct ke C
Extern struct dapat langsung diberikan kepada fungsi C karena tata letaknya sesuai dengan header yang digunakan saat fungsi tersebut dikompilasi.
extern fn use_point(p: Point) void;Periksa Ukurannya
Pastikan extern struct sesuai dengan C menggunakan @sizeOf, yang melaporkan jumlah total byte, termasuk padding untuk alignment.
const n = @sizeOf(Point); // 8Periksa Offset Field
Gunakan @offsetOf untuk melihat dengan tepat lokasi awal setiap field. Ini sangat berguna untuk memastikan struct tersusun sesuai dengan C.
const off = @offsetOf(Point, "y"); // 4Hanya Tipe yang Kompatibel dengan C
Field dalam extern struct harus berupa tipe yang kompatibel dengan C, sehingga bentuk khusus Zig seperti slice tidak diizinkan di dalamnya.
Jembatan ke C
Secara bersama-sama, extern struct dan ABI C memungkinkan Zig dan C berbagi data dengan aman tanpa penyalinan atau perkiraan tentang tata letak. 🔗
Pemeriksaan Singkat
Ingat kembali apa yang dirancang untuk disesuaikan oleh extern struct.
Rangkuman
Anda telah mempelajari bahwa extern struct sesuai dengan ABI C: field yang berurutan dengan padding bergaya C, dapat diteruskan ke C, dan dapat diverifikasi dengan @sizeOf serta @offsetOf. 🎉
Pertanyaan yang Sering Diajukan
Apakah pelajaran “extern struct dan Tata Letak ABI” gratis?
Ya — teks lengkap “extern struct dan Tata Letak ABI” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Zig Academy, upgrade ke CoddyKit PRO. Kursus Zig Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “extern struct dan Tata Letak ABI”?
Sesuaikan tata letak memori struct C. Kamu berlatih Zig Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Zig Academy?
Tidak diperlukan pengalaman sebelumnya. Zig Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “extern struct dan Tata Letak ABI” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Zig Academy ini?
Ya. Setiap pelajaran Zig Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- packed struct untuk Tata Letak Tepat
- Integer Lebar Sembarangan seperti u3
- Field Bit dan Flag
- extern struct dan Tata Letak ABI