Imagine una estructura compuesta por valores de miembro de 32 bits, 16 bits y 8 bits. Donde el orden de los valores de los miembros es tal que cada miembro se encuentra en su límite natural.alineación de miembro de estructura: ¿es posible suponer que no hay relleno
struct Foo
{
uint32_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint32_t e;
};
Alineación de miembros y reglas de relleno son documented para Visual C++. sizeof (Foo) en VC++ la estructura anterior es previsiblemente "12".
Ahora, estoy bastante seguro de que la norma es que no se deben hacer suposiciones sobre relleno y alineamiento, pero en la práctica, ¿otros compiladores en otros sistemas operativos ofrecen garantías similares?
Si no, ¿hay un equivalente de "# paquete de pragma (1)" en GCC?
En C, 'Foo', en' sizeof (Foo) ', no está declarado. La expresión es un error (a menos que 'Foo' esté definido/declarado en otro lugar).Sugiero que no intente escribir archivos fuente en varios idiomas: las desventajas son mucho mayores que cualquier pro que pueda encontrar. – pmg
@pmg: pedantería. :) 'typedef struct Foo {...} Foo;' – Xeo
Creo que el 'typedef' es redundante (y por lo tanto una fuente de errores que se puede quitar de forma segura) en C++. Mi punto sigue siendo: escribir archivos fuente en varios idiomas es más problemático de lo que vale. – pmg