Почему размер этой структуры 16 байт? - PullRequest
0 голосов
/ 29 августа 2018

Размер BITMAPFILEHEADER должен быть 14 байтов, но когда я запускаю код, я получаю 16 байтов. Я думал, что это из-за заполнения, поэтому я добавил __attribute__((packed)), но я все еще получаю 16 байтов. Зачем?

#include<stdint.h>
#include <stdio.h>
#include <stdlib.h>

typedef uint8_t  BYTE;
typedef uint32_t DWORD;
typedef int32_t  LONG;
typedef uint16_t WORD;


typedef struct
{
WORD bfType;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfSize;
DWORD bfOffBits;
} __attribute__((packed))
BITMAPFILEHEADER;

int main(void){

printf(" %i \n",sizeof(BITMAPFILEHEADER));
return 0;


}

1 Ответ

0 голосов
/ 29 августа 2018

Об ошибке было сообщено о той же проблеме в GCC 4.8.1.

атрибут (( упакован )) не упаковывает структуру, содержащую uint16_t, с uint32_t

Комментарий к сообщению об ошибке гласит:

( атрибут ((упакованный)) не работает с целевыми объектами mingw32, поскольку битовые поля ms стали полями по умолчанию).

...