c - 如何从 union 内部引用 union 成员?

标签 c member unions

我正在尝试执行以下操作:

struct AlignedBuffer {
    union
    {
        unsigned int n[4];
        unsigned char b[sizeof(n)];
    };
};

它的生产:

$ gcc -g3 -O1 -std=c99 -Wall -Wextra test.c -o test.exe
test.c:13:32: error: use of undeclared identifier 'n'
        unsigned char b[sizeof(n)];

有没有办法从 union 内部引用 union 成员?

最佳答案

C 不允许您这样做,sizeof 的操作数必须是带括号的类型名称(n 显然不在您的示例中)或表达式(C 语法中的一元表达式), union 的成员也不是。

您可以执行以下操作之一来不对大小进行硬编码:

unsigned char b[sizeof(union { unsigned int n[4]; })];
unsigned char b[sizeof(unsigned int[4])];

在对另一个答案的评论中,您提到对齐问题是这样做的原因,因此您可能对此感兴趣:由 malloc 等分配的内存始终适合所有类型对齐。

关于c - 如何从 union 内部引用 union 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828835/

相关文章:

c - 将 double 转换为 int 会返回向下舍入的数字吗?

c - 如何将字符串转换为int并将结果放入数组

c++ - 为什么必须内联定义在类外部(但在头文件中)的类成员函数?

c++ - 关于 union 和堆分配内存的问题

c - 使用 sudo 启动程序

c - 频率分析?凯撒密码C

c++ - 销毁具有全局实例的类中的静态成员

c++ - 成员函数指针和回调

编译器向已对齐的 union 位字段成员添加填充

c++ - C中的 "union"和 "struct"之间的主要区别是什么?