用 3 个字节填充 C 中的结构

Padding of a struct in C with 3 bytes

假设我在 C 中有一个这样的结构和变量:

typedef struct {
  uint8_t x;
  uint8_t y;
  uint8_t z;
}my_type;

my_type a;
my_type a10[10];

C99 可以肯定

如评论中所述,可以默认添加填充。
为避免这种情况,您可以使用 __attribute__((packed)) 作为您的结构。
这将告诉编译器尽可能紧密地打包您的结构。
看起来像这样:

typedef struct {
  uint8_t x;
  uint8_t y;
  uint8_t z;
} __attribute__((packed)) my_type;

With C99 is it certain that sizeof(a) == 3?

This type will be used as color for an RGB888 framebuffer. So it's important to NOT have space between the adjacent RGB values.

typedef struct {
  uint8_t x;
  uint8_t y;
  uint8_t z;
}my_type;

没有。大小可能是 3 或 4(或理论上其他,但不太可能)


2 个解决方案:

  • 放弃可移植性并使用编译器特定代码打包结构。

  • struct改为3uint8_t的数组,调整代码

我推荐最后一个。