xcode4 - pragma pack(1) ni__attribute__((alineado(1))) funciona
llvm (1)
Xcode usa los compiladores gcc
y clang
que usan __attribute__((packed))
para designar el empaquetado de estructuras.
struct foo {
uint8_t bar;
uint8_t baz;
} __attribute__((packed));
El uso de __attribute__((aligned(1)))
le dice al compilador que comience cada elemento de estructura en el siguiente límite de byte pero no le dice cuánto espacio puede poner al final. Esto significa que el compilador tiene permitido redondear la struct
a un múltiplo del tamaño de la palabra de la máquina para un mejor uso en arreglos y similares. __attribute__((packed))
le dice al compilador que no use ningún tipo de relleno, incluso al final de la struct
.
Mi código solía funcionar en el pasado, pero ahora el tamaño de la estructura de repente es de 16 bytes. Solía ser de 13 bytes. Recientemente actualicé de Xcode 4.2 a Xcode 4.3.1 (4E1019).
#pragma pack(1)
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
};
#pragma pack()
STATIC_ASSERT(expected_13bytes, sizeof(struct ChunkStruct) == 13);
Lo he intentado sin éxito usando
#pragma pack(push, 1)
/* struct ChunkStruct { ... }; */
#pragma pack(pop)
También he intentado lo siguiente, pero no hubo suerte
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
} __attribute__ ((aligned (1)));
¿Cómo empaquetar estructuras con Xcode 4.3.1?