extern struct y diseño de la ABI
Adapte el diseño de memoria de una estructura de C.
extern struct y diseño de la ABI es una lección gratuita de Zig Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Zig Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Zig Academy incluye 4 lecciones en total.
Hablar con C
Cuando Zig llama a código C, ambos lados deben coincidir en el diseño de la memoria. Ese contrato compartido es la ABI.
Las estructuras normales no ofrecen garantías
Una struct normal permite que Zig elija libremente el orden y el relleno de los campos, por lo que su diseño puede no coincidir con lo que espera una biblioteca de C.
Aparece extern struct
Marque un tipo como extern struct y Zig organizará sus campos mediante la ABI de C, haciendo que coincidan campo por campo con una estructura de C.
const Point = extern struct {
x: i32,
y: i32,
};Los campos conservan el orden
Una extern struct conserva el orden de declaración, igual que C, por lo que el primer campo siempre aparece primero en la memoria.
Relleno como en C
A diferencia de una packed struct, extern struct sigue añadiendo relleno para la alineación, exactamente como lo haría un compilador de C.
Packed frente a extern
Use packed para un diseño exacto a nivel de bits y extern para coincidir con el diseño de bytes de C. Resuelven problemas de diseño diferentes.
Pasar estructuras a C
Una extern struct puede pasarse directamente a una función de C, porque su diseño coincide con la declaración con la que se compiló la función.
extern fn use_point(p: Point) void;Comprobar el tamaño
Confirme que una extern struct coincide con C mediante @sizeOf, que informa de sus bytes totales, incluido cualquier relleno de alineación.
const n = @sizeOf(Point); // 8Inspeccionar los desplazamientos de los campos
Use @offsetOf para ver exactamente dónde comienza cada campo; resulta ideal para verificar que una estructura está alineada con C.
const off = @offsetOf(Point, "y"); // 4Solo tipos compatibles con C
Los campos de una extern struct deben ser tipos compatibles con C, por lo que no se permiten dentro de ella formas exclusivas de Zig, como los slices.
El puente hacia C
Juntos, extern struct y la ABI de C permiten que Zig y C compartan datos de forma segura, sin copias ni suposiciones sobre el diseño. 🔗
Comprobación rápida
Recuerde con qué está diseñado para coincidir extern struct.
Repaso
Ha aprendido que extern struct coincide con la ABI de C: campos ordenados con relleno al estilo de C, pasables a C y verificables con @sizeOf y @offsetOf. 🎉
Preguntas frecuentes
¿La lección «extern struct y diseño de la ABI» es gratis?
Sí — el texto completo de «extern struct y diseño de la ABI» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Zig Academy, actualiza a CoddyKit PRO. El curso de Zig Academy incluye 4 lecciones en total.
¿Qué aprenderé en «extern struct y diseño de la ABI»?
Adapte el diseño de memoria de una estructura de C. Practicas Zig Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Zig Academy?
No se requiere experiencia previa. Zig Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «extern struct y diseño de la ABI»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Zig Academy?
Sí. Cada lección de Zig Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- packed struct para un diseño exacto
- Enteros de ancho arbitrario como u3
- Campos de bits y flags
- extern struct y diseño de la ABI