【问题标题】:Why is it undefined to derefrence a pointer to extern union?为什么取消引用指向外部联合的指针是未定义的?
【发布时间】:2012-09-01 09:35:10
【问题描述】:

我有以下代码。为什么它未定义以下列方式取消引用联合指针?

extern union MyUn *P1;          
extern union MyUn *P2;

extern void myfunc(void)
{
      *P1 = *P2;                
}

【问题讨论】:

    标签: c pointers unions c89


    【解决方案1】:

    如果您还没有在此源文件中定义联合,编译器不知道要复制多少。

    联合体的大小是多少?

    【讨论】:

    • 如果此时联合不知道,*P1*P2 不是不完整类型吗?因此,取消引用本身是不行的。
    • 是的,不完整的structunion 类型的主要问题是它们的大小未知(并且包含未知成员)。
    【解决方案2】:

    这与联合无关,也不是“未定义”:如果您尝试取消引用指向不完整类型的指针(出于显而易见的原因),这只是编译器错误。

    【讨论】:

    • 简单的编译器错误是指违反约束,不是吗:)
    猜你喜欢
    • 2011-10-11
    • 2019-07-22
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2021-12-09
    • 2011-10-31
    • 2011-02-24
    • 2011-12-15
    相关资源
    最近更新 更多