循环结构声明C

时间:2015-06-05 04:33:36

标签: c struct syntax typedef declaration

我必须声明一个依赖于另一个结构声明的结构,但是gcc一直在抱怨,我已经达到了一个我无法通过简单地移动代码来解决它的问题。这是合约:

typedef struct inodes
{
    unsigned short int  numInode;
    ListaBlocos         *blocos;
    ListaInodes         *filhos;
    Meta                metaDados;
    unsigned short int  tempo;
} Inode;


typedef struct listablocos
{
    Bloco               bloco;
    struct listablocos  *prox;
} ListaBlocos;

typedef struct listainodes
{
    Inode               inode;
    struct listainodes  *prox;
} ListaInodes;

基本上,ListaInodes是一个包含Inode类型实例的列表。所以我必须在它之前声明Inode。但如果我这样做,gcc会抱怨这个:

error: unknown type name 'ListaInodes'

因为Inode的其中一个字段是其他Inode的列表。如何修复,最好不要对代码进行过多的修改?

1 个答案:

答案 0 :(得分:3)

只需在定义之前添加typedef

typedef struct listainodes ListaInodes;
typedef struct inodes Inode;
typedef struct listablocos ListaBlocos;

struct inodes
{
    unsigned short int  numInode;
    ListaBlocos         *blocos;
    ListaInodes         *filhos;
    Meta                metaDados;
    unsigned short int  tempo;
};

struct listablocos
{
    Bloco         bloco;
    ListaBlocos  *prox;
};

struct listainodes
{
    Inode        inode;
    ListaInodes *prox;
};

如您所见,您甚至可以在实现文件中定义struct而不是标题,从而将结构定义隐藏在潜在的结构用户中,添加accessor get / set之类的函数,您可以添加功能而struct被有效隐藏,这是一种非常常见的技术,有许多好处,例如避免滥用给定的struct字段。