我可以在C中将结构作为其自身结构的成员吗?

问题描述 投票:0回答:1

我可以在C中以其自己的结构(递归结构)创建一个结构的实例吗?

赞:

int main(void)
{
    struct type
    {
         char name[20];
         char address[35];

         struct type;
    };

    return 0;
}

当然,编译器会警告我:

warning: declaration does not declare anything  

但是他/它让它通过并给了我一个可执行程序。


当我想用C ++编译器编译相同的程序时,他/它抛出了一个错误:

 error: ‘main()::type::type’ has the same name as the class in which it is declared

所以问题是针对C,而不是C ++。


  • 我可以这样做,而不会引起程序的任何进一步和更深层次的问题吗?
  • 我可能会通过这种技术进入未定义或未指定的行为吗?
  • 是否有任何理由不这样做(例如,编译/性能方面的问题)?

提前感谢。

c performance structure recursive-datastructures
1个回答
0
投票

首先,struct type;是前向声明,而不是成员变量定义。其次,不,您不能做,您需要使用指针。

要使用结构,必须对其进行完全定义,定义必须在使用之前结束(以}结尾)。否则,编译器将不知道结构的完整大小,也不知道结构的大小以及为该结构实例保留的内存量。

但是要创建指向结构的指针,编译器需要知道的只是结构标记(在您的情况下为type)。那是因为指针的大小在编译时就知道了。此时,不需要知道完整结构的大小。

© www.soinside.com 2019 - 2024. All rights reserved.