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

Rob*_*rtS 1 c performance structure recursive-datastructures

我可以在 C 中以自己的结构(递归结构)创建一个结构的实例(尽管现在我当然会这样做,因为这有点奇怪和棘手)?

喜欢:

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

         struct type;
    };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,编译器给了我警告:

warning: declaration does not declare anything  
Run Code Online (Sandbox Code Playgroud)

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


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

 error: ‘main()::type::type’ has the same name as the class in which it is declared
Run Code Online (Sandbox Code Playgroud)

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


  • 我可以这样做,而不会对我的程序造成任何更深层次的问题吗?
  • 我可能会使用这种技术进入未定义或未指定的行为吗?
  • 是否有任何理由不这样做(编译/性能问题)?

提前致谢。

Som*_*ude 7

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

要使用一个结构,它必须被完全定义,定义必须}在它可以使用之前结束(以结束)。否则编译器不知道结构的完整大小,也不知道它有多大以及必须如何为结构实例保留内存。

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