c - sizeof(struct) 对于不同的编译器是不同的

标签 c struct bit-fields

假设我有这样的代码:

#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[]) {
    typedef struct{
        uint16_t x : 9;
        uint8_t y : 7;
    } z;
    printf("sizeof(z) = %lu\n",sizeof(z));
}

我在 Mac 上得到了不同的 clang 结果 (2),有人告诉我在 Windows 上它返回了 (3)。不确定我是否理解得很好,但我发现第一个编译器将结构压缩为 9+7 = 16 位,而另一个编译器使用 16 位 uint16_t 和 8 位 uint8_t。你能建议一下吗?

最佳答案

不确定我是否理解得很好,但我发现第一个编译器将结构压缩为 9+7 = 16 位,而另一个编译器使用 16 位 uint16_t 和 8 位 uint8_t。你能建议一下吗?

关于位域,首先要记住的是 K&R 第 2 句中的这句话:

(6.9 Bit-fields) "Almost everything about fields is implementation-dependent."

它包括填充、对齐和位字节序。

关于c - sizeof(struct) 对于不同的编译器是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327544/

相关文章:

python - 将 PCL 链接到 Cython C++ 模块

代码只接受输入值然后什么也不会发生

C - 查找命令的完整路径

c - 嵌套Struct的重新定义

c typedef(ed) 不透明指针

c - 迭代结构成员的宏

无法使用c中的循环链表中的条件删除节点

c - 将数组指向相同的内存位置

c++ - 零长度位域的实际使用

c++ - 如何将 bool 值类型转换为 C 中的位字段