繁体   English   中英

定义结构时避免“ typedef的重新定义”警告

[英]Avoiding “redefinition of typedef” warnings when defining structs

我定义了一些互相引用的结构,并在使用它们之前对这些结构进行了类型定义,因此每个结构都“意识到”其他结构(如果没有此结构,则会出现编译错误)。 不知道这是否必要或正确。

现在,使用gcc进行编译时,我收到“ typedef的重新定义”警告。 解决这个问题的正确方法是什么?

typedef struct a A;
typedef struct b B;
typedef struct c C;

struct a {
    B* list;
    A* parent;
};

struct b {
    A* current;
    B* next;
};

struct c {
    A* current;
    A* root;
};

更新:愚蠢的,错误的粘贴粘贴导致此标头两次包含在另一个文件中。 我是C语言的新手,并认为它与文件中的结构两次有关。 感谢@Kevin Ballard的注意。

这是为什么需要标头/包含防护的一个很好的例子:

#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE

typedef struct a A;
typedef struct b B;
/* ... */

#endif

现在,您已经添加了分号,我可以看到您的代码中没有错误。 您也可以像这样向前声明类型:

struct b;
struct c;

typedef struct a {
    struct b* list;
    struct a* parent;
} A;

typedef struct b {
    A* current;
    struct b* next;
} B;

typedef struct c {
    A* current;
    A* root;
} C;

但是,您的方法很好,避免多次键入struct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM