如何在C中使用前向声明?

时间:2016-04-14 04:36:45

标签: c typedef forward-declaration

我正在编写一个C程序,但我无法在Stack Overflow上找到相应的示例。我有2个文件,level.h,lib.h,它取决于另一个文件中定义的类型。这会生成错误redefinition of typedef 'metalevel_t'/'entry_t' is a C11 feature

level.h:

#ifndef level_H
#define level_H
#include "lib.h"

// level.h
typedef struct metalevel metalevel_t; 


// key value pairs, value are integers 
typedef struct entry {
    ...
} entry_t;

lib.h:

typedef struct entry entry_t;
typedef struct metalevel{
    entry_t* ...; 
} metalevel_t;

metalevel_t Info[...]; 

但是,如果我用下面的内容替换entry_t(和metalevel_t),我会收到typedef requires a name个错误。

struct entry {
    ...
};

我的Makefile看起来像这样:

CC=gcc
CFLAGS=-I.
CFLAGS=-std=c99
LDFLAGS = -lm

macro_main: macro_main.o lsm.o lib.o level.o
    $(CC) -o macro_main macro_main.o lsm.o lib.o level.o $(CFLAGS) 

macro_main.o: 

clean: 
      $(RM) macro_main 

在这种情况下如何使用前向声明?

1 个答案:

答案 0 :(得分:4)

level.h:

#include "lib.h"

struct entry {
    // ...
};

lib.h:

typedef struct entry entry_t;
typedef struct metalevel{
    entry_t* p;
} metalevel_t;

不确定metalevel_t Info[...];的含义,这可能会导致...的任何可能内容出错。