为什么此结构的大小为16字节?

时间:2018-08-28 21:41:03

标签: c bitmap size padding

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 :(得分:2)

在GCC 4.8.1中报告了关于同一问题的错误。

attribute((packed)) does not pack struct containing uint16_t with uint32_t

有关错误报告的评论指出:

  

属性((打包))在mingw32目标上不起作用,因为ms-bitfields成为默认位)。