【发布时间】:2012-09-01 09:35:10
【问题描述】:
我有以下代码。为什么它未定义以下列方式取消引用联合指针?
extern union MyUn *P1;
extern union MyUn *P2;
extern void myfunc(void)
{
*P1 = *P2;
}
【问题讨论】:
我有以下代码。为什么它未定义以下列方式取消引用联合指针?
extern union MyUn *P1;
extern union MyUn *P2;
extern void myfunc(void)
{
*P1 = *P2;
}
【问题讨论】:
如果您还没有在此源文件中定义联合,编译器不知道要复制多少。
联合体的大小是多少?
【讨论】:
*P1 和 *P2 不是不完整类型吗?因此,取消引用本身是不行的。
struct 和union 类型的主要问题是它们的大小未知(并且包含未知成员)。
这与联合无关,也不是“未定义”:如果您尝试取消引用指向不完整类型的指针(出于显而易见的原因),这只是编译器错误。
【讨论】: