当前位置:  开发笔记 > 编程语言 > 正文

嵌套结构

如何解决《嵌套结构》经验,为你挑选了1个好方法。

以下代码在C++编译器上编译.

#include
int main()
{
struct xx
{
    int x;
    struct yy
    {
        char s;
        struct xx *p;
    };
    struct yy *q;
};

使用C编译器编译时,行为会有什么不同吗?
即会有任何编译器错误?



1> AnT..:

你帖子中的代码显然是不完整的,只是声明,所以很难说出任何结论.

明显不同的是,在C++中,内部结构类型将是外部结构类型的成员,而在C语言中,两种结构类型将是相同(封闭)范围的成员.(顺便说一下,你打算在当地申报main吗?).

换句话说,在C++中,后面的代码必须将结构称为xxxx::yy,而在C中它们只是xxyy.这意味着对于C和C++,进一步的代码看起来会有所不同,如果它将在C++中编译,它将无法在C中编译,反之亦然.

补充: C语言禁止在其他结构中声明结构类型而不声明该类型的成员.因此,您struct yy声明在C中是非法的,并将生成编译器诊断消息.如果您希望您的代码在C和C++中合法化,则必须将struct yy声明与某些数据成员声明相结合.在您的情况下可能是指针q:

struct xx {
        int x;
        struct yy {
                char s;
                struct xx *p;
        } *q;
};

上述内容在C和C++中都是合法的(考虑到我之前解释的差异),但您的原始声明在C中是不合法的.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有