关于c中的前瞻性声明

时间:2017-05-20 11:44:21

标签: c struct forward-declaration

typedef struct treeNodeListCell {
    treeNode *node;
    struct treeNodeListCell *next;
}treeNodeListCell;

typedef struct treeNode{

    imgPos position;
    treeNodeListCell *next_possible_positions;

}treeNode;


typedef struct segment{
    treeNode *root;
}Segment;

我对上面结构的前向声明感到很困惑,使用当前声明的方式是什么?

2 个答案:

答案 0 :(得分:1)

因此,从您的示例代码中,我了解您希望typedef的<{1>} 使用struct您需要转发声明。最直接(原文如此)的方式是这样的:

typedef struct treeNode treeNode;
typedef struct treeNodeListCell treeNodeListCell;
typedef struct segment segment;

struct treeNodeListCell {
    treeNode *node;
    treeNodeListCell *next;
};

struct treeNode {
    imgPos position;
    treeNodeListCell *next_possible_positions;
};

struct segment {
    treeNode *root;
};

使用比更旧的标准时要小心。在这种情况下,不允许重复typedef,因此不同标头中的任何前向声明必须如下所示

struct treeNode;

然后使用struct treeNode代替treeNode来引用类型。

使用,此限制最终消失,如果定义的类型相同,您可以重复typedef

答案 1 :(得分:0)

你应该写

typedef struct treeNodeListCell {
    struct treeNode *node;
    ^^^^^^^^^^^^^^^
    struct treeNodeListCell *next;
}treeNodeListCell;

在这种情况下,类型名称struct treeNode是前向声明的。

如果声明如下

typedef struct treeNodeListCell {
    treeNode *node;
    ^^^^^^^^
    struct treeNodeListCell *next;
}treeNodeListCell;

然后编译器无法知道treeNode的含义。